0

我有下面的2个数据框

    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然后在其中创建一个新列groupn其中包含如下所示的相应值e$group

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

3 回答 3

2

Keep only unique rows of e and merge

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

With dplyr :

library(dplyr)
n %>% inner_join(distinct(e), by = c('name' = 'id'))
于 2021-03-02T12:33:05.320 回答
2

You can use 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
于 2021-03-02T12:34:11.350 回答
2

我们可以用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
于 2021-03-02T16:33:00.750 回答