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

KT_*_*T_1 4 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Spa*_*man 8

那将是因为

 Error in Ops.factor(StartPC, EndPC) : level sets of factors are different
Run Code Online (Sandbox Code Playgroud)

您的两列是因素,而不是字符.因子是分类变量,它们存储为整数和"级别"的查找表.比较它们实际上是比较基础整数,因此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
Run Code Online (Sandbox Code Playgroud)

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