R使用read.table读入因子时前导空格生成重复水平如何解决?
问题根因
该问题和quote参数的作用逻辑无关,核心是read.table在指定非空白分隔符(此处为逗号sep=",")时,默认不会自动清除字段前后的多余空格:
- 拆分字段时,逗号和字段实际内容之间的前置空格会被判定为字段内容的一部分保留
quote参数仅能控制引号内的内容作为整体识别,不会自动剔除引号外的前置/后置空格- 不同行同列字段的前置空格数量不同,自然会被判定为不同的因子值,最终出现重复水平的问题
解决方案
直接在read.table的参数中添加strip.white = TRUE即可,该参数会自动清除所有字段前后的空白字符,无论字段是否被引号包裹。
修改后的完整代码如下:
x <- read.table(tc <- textConnection( "Project, TestingType, CodeType 'TS', 'TDDEUT', Production 'TS', 'TDDEUT', Testing 'NR', 'LabAuto', Production 'In', 'LabAuto', Testing"), header=TRUE, colClasses=c("character", "factor", "factor"), sep=",", na.strings=c("NULL"), quote="'", strip.white = TRUE)
验证运行结果:
> x$TestingType [1] TDDEUT TDDEUT LabAuto LabAuto Levels: LabAuto TDDEUT > x$CodeType [1] Production Testing Production Testing Levels: Production Testing
如果不希望修改读入参数,也可以在读入后用trimws()函数单独处理列内容,再重新生成因子,不过直接添加strip.white = TRUE是最高效的方案。
内容的提问来源于stack exchange,提问作者user3511585
相关产品推荐
相关产品推荐

