2016-08-11 134 views
1

我有一個大型的數據集,我有一個基於站名稱的數據框列表,我希望根據行檢出名稱和返回名稱創建一個包含數值的新列。所述數據的示例如下所示:如何根據每個特定數據框內的值在數據框列表中創建新列?

fz$'66th & Center' 
Bike CheckoutKioskName ReturnKioskName 
24583 191  66th & Center 66th & Center 
24584 191  66th & Center 66th & Center 
24585 191  66th & Center 66th & Center 
24586 191  66th & Center 66th & Center 
24587 191  66th & Center 66th & Center 
24588 191  66th & Center 66th & Center 
24589 11  66th & Center 66th & Center 
24590 11  66th & Center 66th & Center 
24591 11  66th & Center 66th & Center 
24592 11  66th & Center 66th & Center' 

我想創建一個名爲基於如果CheckoutKioskName是相同的「計數」新列ReturnKioskName然後計數值應爲0,如果CheckoutKioskName ISN」 t與列表值名稱相同(在本例中爲'66th & Center'),那麼計數值應該是-1,最後一個選項是如果ReturnKioskName與列表值名稱不同,那麼計數值應該是的。我在做這件事的嘗試在if if else語句中。無論是列是因素還是列是字符,我都會在使用它時收到錯誤。

if(test$CheckoutKioskName == test$ReturnKioskName){ 
    test$count <- 0 
}else{ 
    if(test$ReturnKioskName != t){ 
    test$count <- -1 
    }else{ 
    if(test$CheckoutKioskName != t){ 
     test$count <- 1 
    } 
    } 
} 

我想認爲這是使用lapply來完成這個任務的方式,但我繼續每當我在這裏使用它失敗。

我感謝任何幫助,我可以得到。

回答

1

我們可以使用lapply

lapply(names(fz), function(nm) {fz1 <- fz[[nm]] 
    transform(fz1, Count = ifelse(CheckoutKioskName == ReturnKioskName, 0, 
       ifelse(CheckoutKioskName ! = rep(nm, nrow(fz1)), -1, 1)))}) 
+0

我無法得到這個工作。它給我一個處理每個數據幀長度的錯誤。 – Brett

+0

@Brett代碼中有一個錯字'test $ ReturnKioskName'。現在已經修復了。 – akrun

+1

它現在完美運行!謝謝。 – Brett

0

嘗試通過哪些語句並將標記存儲在新列中。我建議將測試列字符,但隨後未能嘗試,如果有差別,因爲我沒有時間來重建數據;)

test$count[which(test$CheckoutKioskName == test$ReturnKioskName)] <- 0 

...等等。應該做的伎倆。

+0

的哪些語句從我原來的名單我的小單數據幀的工作。我結束了使用: test $ count [which(test $ CheckoutKioskName == test $ ReturnKioskName)] < - 0 test $ count [which(test $ CheckoutKioskName!= names(fz [1]))] < - -1 test $ count [(測試$ ReturnKioskName!= names(fz [1]))] < - 1 現在我有一個列表'fz',其中包含37個不同的df,我希望同樣的'數'列。任何關於如何做同樣的事情,我只是做了,但整個列表的快速建議? – Brett

+0

遍歷列表。對於小數據集應該很快。如果你處理的是大數據,akrun的建議可能會更快。 –

相關問題