我有一个问题,我想匹配非常大的调查数据集的起始邮政编码和终止邮政编码,然后将这些结果放入新的数据框中。我创建了一个示例数据框以用于说明目的。
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)
使用上面的代码,我想创建一个仅包含ID号的数据帧(data2),由此开始和结束邮政编码是相同的。但是,我收到错误消息:
Ops.factor(StartPC,EndPC)中的错误:因子级别集不同
输出只需要在新数据表中包含ID号1和5。
最佳答案
那是因为
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
要么像这样快速运行,要么使数据框架首先包含字符,或者确保两列的层级相同。