R中如何基于一个数据框筛选另一个数据框的行(dplyr实现)
解决方法
方法1:修改现有merge代码
你当前的merge代码会将df1的所有列也带入结果,只需要在merge后选取df2的原有列即可:
NewDataframe <- merge(df2, df1, by = 'run', all.x = FALSE)[, names(df2)]
方法2:用逻辑匹配直接筛选(更简洁高效)
你的需求本质是筛选df2中run字段的值存在于df1的run字段中的行,直接用%in%运算符即可,不需要做表连接:
NewDataframe <- df2[df2$run %in% df1$run, ]
方法3:tidyverse生态方案
如果你使用dplyr包,可以用专门的半连接函数semi_join,它会返回左表(df2)中与右表(df1)匹配的行,且不会带入右表的任何列:
library(dplyr) NewDataframe <- semi_join(df2, df1, by = "run")
以上三种方法都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者Lila McPhee
相关产品推荐
相关产品推荐

