根据因子r

时间:2018-07-19 15:37:05

标签: r

我试图根据每个观察结果的公共因子ID2遍历大型地址数据集(300,000多行)。该数据集包含来自两个不同来源的地址,我正在尝试查找它们之间的匹配项。为了确定此匹配项,我想遍历每个ID2作为因子,并从两个数据集(建筑和属性数据集)的每一个中搜索一条线。这是我的期望输出Picture of desired output的图片 这是我尝试过的示例代码

     PROPERTYNAME=c("Vista 1","Vista 1","Vista 1","Chesnut Street","Apple 
     Street","Apple Street")
     CITY=c("Pittsburgh","Pittsburgh","Pittsburgh","Boston","New York","New 
     York")
     STATE= c("PA","PA","PA","MA","NY","NY")
     ID2=c(1,1,1,2,3,3)
     IsBuild=c(1,0,0,0,1,1)
     IsProp=c(0,1,1,1,0,0)

    df=data.frame(PROPERTYNAME,CITY,STATE,ID2,IsBuild,IsProp)

    for(i in levels(as.factor(df$ID2))){
    for(row in 1:nrow(df)){
      df$Any_Build[row][i]<-ifelse(as.numeric(df$IsBuild[row][i])==1)
      df$Any_Prop[row][i]<-ifelse(as.numeric(df$IsProp[row][i])==1)
   }
}

我曾尝试嵌套for循环,但没有运气,并且在r的apply函数方面苦苦挣扎。我将不胜感激任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

ID2如何影响输出?如果没有任何效果,则可以使用示例代码中使用的相同逻辑,而无需循环。 Ifelse是矢量化的,因此您不必每行都运行它 编辑格式:

LIHTCComp1$AnyBuild <- ifelse(LIHTCComp1$IsBuild ==1,TRUE,FALSE)
LIHTCComp1$AnyProp <- ifelse(LIHTCComp1$IsProp ==1,TRUE,FALSE)

希望这会有所帮助。

答案 1 :(得分:0)

如果您的主要数据集称为D,而建筑数据集称为B,而属性数据集称为P,则可以执行以下操作:

D$inB <- D$ID2 %in% B$ID2
D$inP <- D$ID2 %in% P$ID2

如果您想要B中的一些数据(例如说一个地址),则可以使用merge

D <- merge(D, B[c("ID2", "address")], by = "ID2", all.x = TRUE, all.y = FALSE)

如果B中的每一行都有一个地址,那么NA中新address列中的D应与FALSE中的{ D$inB