我试图根据每个观察结果的公共因子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函数方面苦苦挣扎。我将不胜感激任何帮助。谢谢!
答案 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
。