通过邮政编码进行子集(因子级别)

时间:2011-12-07 16:15:41

标签: r subset

我有一个问题,我希望匹配一个非常大的调查数据集的开始邮政编码和结束邮政编码,并将这些结果放在一个新的数据框中。我已经创建了一个示例数据框,用于说明目的。

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)

使用上面的代码,我想创建一个数据帧(data2),它只包含开始和结束邮政编码相同的ID号。但是,我收到错误消息:

  

Ops.factor(StartPC,EndPC)中的错误:因素级别集不同

输出只需要在新数据表中包含ID号1和5。

1 个答案:

答案 0 :(得分:8)

那将是因为

 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

或者像这样,或者首先使用字符制作数据框,或者确保两列都使用相同的级别。