2017-08-03 113 views
1

正如問題所述,我試圖在另一個數據框(B中)的任何位置找到列值(在A $ X [i]中)並返回列名(B $ [j])。如何在另一個數據框中的任意位置查找列值並返回列名

我這裏有兩個表:

Client Account df 
JOHN  KATE RAM ABE 
2341 K919 Q1234 23445 
V454 56783 88872 9009 
87874 345GH 63547 8834S 
Client details df 
Date  ClientNumber Region Amount  Insurance 
12/5/2015 9009   EMEA  15236.23 Yes 
12/5/2015 K919   EMEA  1889.22  No 
12/5/2015 87874   EMEA  152000.0 No 
12/5/2015 345GH   EMEA  28877.53 Yes 
12/5/2015 9009   EMEA  90000.89 Yes 

我想客戶端名稱添加到客戶端的詳細信息表 所需的輸出:

Client details table 
Date  ClientNumber Region Amount  Insurance Name 
12/5/2015 9009   EMEA  15236.23 Yes  ABE 
12/5/2015 K919   EMEA  1889.22  No   KATE 
12/5/2015 87874   EMEA  152000.0 No   JOHN 
12/5/2015 345GH   EMEA  28877.53 Yes  KATE 
12/5/2015 9009   EMEA  90000.89 Yes  ABE 

表是如此之大,我會喜歡使用矢量化而不是使用循環。

+1

合併是第一幀長,名稱列是最後兩行的client_number列和另外兩個字符列,那麼您可以在ClientNumber和client_number上合併。這將是最簡單的 – sconfluentus

+0

完美,謝謝兄弟! – LoopBloke

+0

姐姐......但你的歡迎! – sconfluentus

回答

0

如果你在這裏粘貼了可能是dput(head(data))的結果,那麼它會更好,因爲它可以輕鬆回答。由於沒有循環既不包含在諸如*apply功能需要,那麼我想你需要做的事情在矢量格式的背景循環類:

Details$Name <- names(unlist(AccountDF))[match(Details$clientnumber,unlist(AccountDF),nomatch = 0)] 

我希望它可以幫助

+0

非常感謝!如果我不使用虛擬數據,不能購買麪包。抱歉。 – LoopBloke

+0

那麼,這裏的代碼是免費的..沒有人賣掉它們。只需給出一小部分數據供您以有序和詳細的方式回答就可以了。謝謝 – Onyambu

2

我假設第一個數據幀是A,第二個數據幀是B。您應該能夠使用兩個包tidyrdplyr合併:

library(tidyr) 
library(dplyr) 

A %>% 
    gather(JOHN:ABE, key = Name, Value = ClientNumber) %>% 
    left_join(B, ., by = "ClientNumber") 

left_join使用完整的數據集B和如果轉換與新修改的數據集A通過ClientNumber

+1

感謝您的保存。不知道我的腦袋在哪裏......意思是「聚集」,而不是「df」......我想我喝了另一杯咖啡的時間 –

+0

哈哈,我想到了。謝謝你,先生, – LoopBloke

相關問題