簡體   English   中英

基於因子r遍歷數據集

[英]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中的每一行都有一個地址,則Daddress列中的NA應當與D$inBFALSE一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM