我不喜欢(或者说不理解)match()
函数,因为如果它没有找到值,它会输出NA
,而且它只返回第一次匹配的结果。
让数据成为
df1 <- data.frame(id=c(1:3,3:4), val= 11:15)
df2 <- data.frame(id= c(2,0,3,1), val=91:94)
我想用df2
的id子集df1
。
df_expected <- data.frame(id= c(2,3,3,1), val= c(12,13,14,11))
但是如果我尝试使用df1[match(df2$id, df1$id), ]
来子集化df1
,我得到的不是我所期望的,首先,因为match
返回一个NA
,因为它不能t在df1
中找到id 0
,这会添加一行,其中只包含NA
s,其次,因为它只返回id 3
在df1
中的第一次出现,但我希望所有一场比赛的发生。
如何调整匹配函数,使其按上述方式运行?
2条答案
按热度按时间py49o6xq1#
您可以使用
%in%
和which
的组合。不过,输出不是按照您发布的顺序。创建于2023-04-22使用reprex v2.0.2
编辑
以下将给予已发布的订单。
创建于2023-04-22带有reprex v2.0.2
编辑2
在阅读了Ingo Pingo和TarJae的评论后,我将上述解决方案更改为
1
创建于2023-04-22使用reprex v2.0.2
二
创建于2023-04-22使用reprex v2.0.2
gcmastyq2#
这将给予预期的输出:
或在碱R中: