匹配两个数据框的两个列之间的值,并使用另一个数据框的值创建一个新列



下面有两个数据帧

name<-c("Adam","Bill","Jack")
value<-c(3,2,1)
n<-data.frame(name,value)

name value
1 Adam     3
2 Bill     2
3 Jack     1
id<-c("Adam","Adam","Bill","Jack","Jack")
group<-c("A","A","A","B","B")
e<-data.frame(id,group)
id group
1 Adam     A
2 Adam     A
3 Bill     A
4 Jack     B
5 Jack     B

,我想在其中匹配n$namee$id的值,然后在n中创建一个新的列group,其中e$group中的相应值如下:

name value group
1 Adam     3     A
2 Bill     2     A
3 Jack     1     B

您可以使用match:

n$group <- e$group[match(n$name, e$id)]
n
#  name value group
#1 Adam     3     A
#2 Bill     2     A
#3 Jack     1     B

仅保留emerge的唯一行

merge(n, unique(e), by.x = 'name', by.y = 'id')
#  name value group
#1 Adam     3     A
#2 Bill     2     A
#3 Jack     1     B

Withdplyr:

library(dplyr)
n %>% inner_join(distinct(e), by = c('name' = 'id'))

我们可以使用data.table

library(data.table)
setDT(n)[unique(e), on = .(name = id)]
#     name value group
#1: Adam     3     A
#2: Bill     2     A
#3: Jack     1     B

最新更新