首页 > 解决方案 > 加入数据帧时 R 中的 Where 子句

问题描述

我是 R 编程的新手。我的任务是使用 where 条件过滤器加入数据框。我下面有 2 个数据框我想通过 col1 将 df2$B_col2 加入 df1,但前提是 df1$A_col2=1。

我使用下面的代码给出了结果,但我知道代码是有效的。如果在加入表格本身时有任何方法可以删除记录,请告诉我。


Df1      col1      A_col2
1          b          1
2          a          1
3          a          0
4          c          0
5          d          1

Df2      col1      B_col2
1          a          10                     
2          b          20
3          c          30
4          d          40
5          e          50

代码

df3 <- left_join(df1,df2, by = "col1")
df4 <- df3[df3$df1col2 == 1,]

输出

 col1 df1col2 df2col2
1    b       1      20
2    a       1      10
5    d       1      40

标签: rjoin

解决方案


如果您使用base R,您可以尝试merge+ subset,如下所示

> subset(merge(df1, df2, all.x = TRUE), A_col2 > 0)
  col1 A_col2 B_col2
1    a      1     10
3    b      1     20
5    d      1     40

match+subset

> subset(
+   transform(
+     df1,
+     B_col2 = df2$B_col2[match(col1, df2$col1)]
+   ),
+   A_col2 > 0
+ )
  col1 A_col2 B_col2
1    b      1     20
2    a      1     10
5    d      1     40

一个data.table选项

> setDT(df2)[setDT(df1), on = .(col1)][A_col2 > 0]
   col1 B_col2 A_col2
1:    b     20      1
2:    a     10      1
3:    d     40      1

推荐阅读