我有一个问题,我想要匹配一个非常大的调查数据集的开始邮政编码和结束邮政编码,并将这些结果放入一个新的数据格式。我创建了一个用于演示的示例dataframe。
ID = c(1,2,3,4,5)
StartPC = c("AF2 4RE","AF3 5RE","AF1 3DR","AF2 4RE","AF2 4PE")
EndPC = c("AF2 4RE","NA","AF2 3DR","AX2 4RE","AF2 4PE")
data<-data.frame(ID,StartPC,EndPC)
data2 <- subset(data, StartPC==EndPC,na.rm=TRUE)使用上面的代码,我想要创建一个dataframe (data2),它只包含ID号,其中开始和结束的邮政编码是相同的。但是,我得到了错误消息:
错误在Ops.factor(StartPC,EndPC):水平集的因素是不同的
输出只需要在新数据表中包含ID号1和5。
发布于 2011-12-07 16:25:24
那是因为
Error in Ops.factor(StartPC, EndPC) : level sets of factors are different您的两列是因素,而不是字符。因子是分类变量,它们存储为整数和“级别”的查找表。比较它们实际上是比较底层整数,所以R确保您是在比较具有相同级别的因素。如果没有,它就会认定你在做坏事。
因此,转换为字符:
> subset(data, as.character(StartPC)==as.character(EndPC),na.rm=TRUE)
ID StartPC EndPC
1 1 AF2 4RE AF2 4RE
5 5 AF2 4PE AF2 4PE要么就像这样,要么让数据帧中的字符放在首位,要么确保这两列都是以相同的级别生成的。
https://stackoverflow.com/questions/8418580
复制相似问题