R 在另一个数据帧中匹配两个变量的子集数据

R 在另一个数据帧中匹配两个变量的子集数据,r,R,形势 我有两个数据帧,df1和df2: id <- c(1, 2, 3, 4, 5, 6, 7, 8) position <- c("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH") value <- c(100, 200, 300, 400, 500, 600, 700, 800) df1 <- data.frame(id, position, value) id <- c(1, 2, 3, 4, 6, 8) posi

形势

我有两个数据帧,
df1
df2

id <- c(1, 2, 3, 4, 5, 6, 7, 8)
position <- c("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH")
value <- c(100, 200, 300, 400, 500, 600, 700, 800)
df1 <- data.frame(id, position, value)

id <- c(1, 2, 3, 4, 6, 8)
position <- c("AA", "BB", "CC", "EE", "DD", "HH")
value <- c(700, 800, 900, 100, 200, 900)
df2 <- data.frame(id, position, value)
我想我可以使用
dplyr
,比如

#library(dplyr)
df3 <- filter(df1, id %in% df2$id) 
df3

感谢您的帮助。

您可以
将这两列粘贴在一起并
匹配它们:

    df1[match(paste(df2$id,df2$position),paste(df1$id,df1$position),nomatch=0),]
    #id position value
    #1  1       AA   100
    #2  2       BB   200
    #3  3       CC   300
    #8  8       HH   800

merge
仍然可以非常有效地使用,而无需在合并后删除列

keys <- c("id","position")
merge(df1,df2[keys],by=keys)

#  id position value
#1  1       AA   100
#2  2       BB   200
#3  3       CC   300
#4  8       HH   800

keys@tospig-我不明白这是怎么绕过你的问题的。你必须写出两次长长的变量列表。我猜他想合并这两个data.frames而不使用
merge
。当然,他不必“写出一长串的变量”。他可以像你一样定义变量名的向量。但我认为这与这个答案无关;我在评论中犯了一个错误,我的意思是我不想写下所有需要删除的变量。所以,是的,我很高兴写下我正在“合并”的两个专栏。相应地编辑了我的问题。或者只是
merge(df1,df2[-3])
如果OP真的关心击键,我没有意识到你可以用这种方式进行
merge
,但从这个角度看,这是有意义的。
    df1[match(paste(df2$id,df2$position),paste(df1$id,df1$position),nomatch=0),]
    #id position value
    #1  1       AA   100
    #2  2       BB   200
    #3  3       CC   300
    #8  8       HH   800
keys <- c("id","position")
merge(df1,df2[keys],by=keys)

#  id position value
#1  1       AA   100
#2  2       BB   200
#3  3       CC   300
#4  8       HH   800