首页 > 解决方案 > 在 dplyr 中保留与其他 df 具有相同列字符的行

问题描述

我想要一个 df 保持与'column'观察结果匹配的行df2

df <- data.frame(column=c("Obs1", "Obs2", "Obs3", "Obs4", "Obs5"), S1 = c(1.4,1.9,1.3,2,1), S2= c(0.8,2,1,3,4), S3=c(2.4,2.1,0.5,2,3), S4=c(0.5,0.6,0.9,4,5), S5=c(1.4,1.3,1.6,3,3))

df2<- data.frame(column=c("Obs2", "Obs4"), X = c(1.4,1.9), Y= c(0.8,2))

像这样的东西:

library(dplyr)
df3<- df %% keep rows which df$column observations are found in df2$column

到最终输出:

  column S1  S2  S3  S4  S5
1 Obs2   1.9 2.0 2.1 0.6 1.3
2 Obs4   2.0 3.0 2.0 4.0 3.0

标签: rdplyr

解决方案


这称为半连接:

df %>% semi_join(df2, by = "column")
#   column  S1 S2  S3  S4  S5
# 1   Obs2 1.9  2 2.1 0.6 1.3
# 2   Obs4 2.0  3 2.0 4.0 3.0

如果它有用,则相反的称为反连接(并具有一个anti_join功能),它只保留不匹配的行。

加入比过滤更灵活,因为如果有多个列要匹配,它就可以工作。


推荐阅读