[英]Looping through a data set based on a factor r
我正在嘗試根據每個觀察結果的公共因子ID2遍歷大型地址數據集(300,000多行)。 該數據集包含來自兩個不同來源的地址,我正在嘗試查找它們之間的匹配項。 為了確定此匹配項,我想遍歷每個ID2作為因子,並從兩個數據集(建築和屬性數據集)的每一個中搜索一條線。這是我的期望輸出的圖片。我嘗試過的代碼
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)
}
}
我已經嘗試過嵌套循環,但沒有運氣,我正在努力與r的apply函數。 我將不勝感激任何幫助。 謝謝!
ID2如何影響輸出? 如果沒有任何效果,則可以使用示例代碼中使用的相同邏輯,而無需循環。 Ifelse是矢量化的,因此您不必每行都運行它。編輯格式:
LIHTCComp1$AnyBuild <- ifelse(LIHTCComp1$IsBuild ==1,TRUE,FALSE)
LIHTCComp1$AnyProp <- ifelse(LIHTCComp1$IsProp ==1,TRUE,FALSE)
希望這可以幫助。
如果您的主要數據集稱為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
中的每一行都有一個地址,則D
新address
列中的NA
應當與D$inB
的FALSE
一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.