У меня есть 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$name и e$id, а затем создать новый столбец group в n с соответствующими значениями, найденными в e$group, например:

name value group
1 Adam     3     A
2 Bill     2     A
3 Jack     1     B
r
0
firmo23 2 Мар 2021 в 15:30

2 ответа

Лучший ответ

Вы можете использовать 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
2
GKi 2 Мар 2021 в 12:34

Оставить только уникальные строки e и 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

С dplyr:

library(dplyr)
n %>% inner_join(distinct(e), by = c('name' = 'id'))
2
Ronak Shah 2 Мар 2021 в 12:33