R 按邮政编码分组(因素级别)

R 按邮政编码分组(因素级别),r,subset,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) da

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

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=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”)
数据这将是因为

 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

或者像这样在运行中,或者首先使用字符创建数据框,或者确保两列具有相同的级别。

我想补充一点,当通过
read.csv()
或类似方式读取data.frame时,
stringsAsFactors=FALSE
参数在这里会很有帮助。