R如果表a中第1列中的值与表b中第1列中的值匹配,则将表b中第2列的值复制到表1中

时间:2015-05-19 15:12:58

标签: r

#问题#我有2个数据帧。 1个数据帧(A)有多列。数据框A中的第1列具有电子邮件地址,其中多行具有相同的电子邮件地址。另一个数据框(B)在第1列和第2列中有一个唯一的电子邮件地址列表,表示该电子邮件在数据框A的列表中出现的次数。我想基本上执行vlookup,以便在电子邮件地址匹配的任何地方从两个表中,它会将计数拉入数据帧A的新列。任何人都可以提供帮助吗?

数据

Table A   
Column 1    Column 2      Column 3  
a@a.com     home          123   
a@a.com     house         456   
b@b.com     tree          221   

Table B   
Column 1    Column 2(Count)      
a@a.com        2   
b@b.com        1   

Expected result should be Table A with an additional column:   
Column 1    Column 2      Column 3     Column 4   
a@a.com      home           123             2   
a@a.com      house          456             2   
b@b.com      tree           221             1   

1 个答案:

答案 0 :(得分:2)

您不需要df2来获取计数。您可以单独使用df1来获取计数:

#solution using data.table package
library(data.table)
setDT(df1)[,count:=.N,by=Column1]
   Column1 Column2 Column3 count
1: a@a.com    home     123      2
2: a@a.com   house     456      2
3: b@b.com    tree     221      1

#solution using dplyr package
library(dplyr)
df1 %>%
group_by(Column1)%>%
mutate(count=n())
Source: local data frame [3 x 4]
Groups: Column1

  Column1 Column2 Column3 count
1 a@a.com    home     123     2
2 a@a.com   house     456     2
3 b@b.com    tree     221     1
#Data
df1<-structure(list(Column1 = structure(c(1L, 1L, 2L), .Label = c("a@a.com", 
"b@b.com"), class = "factor"), Column2 = structure(1:3, .Label = c("home", 
"house", "tree"), class = "factor"), Column3 = c(123L, 456L, 
221L)), .Names = c("Column1", "Column2", "Column3"), class = "data.frame", row.names = c(NA, 
-3L))