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

R 匹配两个数据帧的两列之间的值,并使用另一列的值创建一个新列,r,R,我有下面的两个数据帧 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&quo

我有下面的两个数据帧

    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
只保留e和merge的唯一行

使用dplyr:

您可以使用match:

我们可以使用data.table

name value group
1 Adam     3     A
2 Bill     2     A
3 Jack     1     B
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
library(dplyr)
n %>% inner_join(distinct(e), by = c('name' = 'id'))
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
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