如何在另一个数据框中的任何位置查找列值并返回列名称

时间:2017-08-03 18:38:25

标签: r

正如问题所述,我试图在另一个数据框(在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

这些表非常大,我很乐意使用矢量化而不是使用循环。

2 个答案:

答案 0 :(得分: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 :(得分:0)

如果您将dput(head(data))的结果粘贴到此处以便能够轻松回答,那会更好。由于没有循环,所以在背景中包含循环的类(例如*apply函数)都不需要,所以我猜你需要以矢量格式做事:

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

我希望它可以提供帮助