下面有两个数据帧
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
的值,然后在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
仅保留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
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