我有一份数据帧 list ,abc.我希望得到一个列表,其中a不会被更改,b将只包含那些不在a中的行,c将只包含那些不在b中的行.

# Sample data
a <- data.frame(num = 1:4, let = letters[1:4])
b <- data.frame(num = 2:6, let = letters[2:6])
c <- data.frame(num = 3:8, let = letters[3:8])

dfs <- list(a, b, c)

让我犯错的部分是,我需要对前面的original个数据帧执行anti_Join,而不是在对其前面的数据帧执行反联接之后创建的数据帧.我的直觉是使用purrr中的accumulate来做这件事,但我想不出如何让它在原始的先前数据帧上工作.

dfs |> 
  accumulate(~anti_join(.y, .x))

[[1]]
  num let
1   1   a
2   2   b
3   3   c
4   4   d

[[2]]
  num let
1   5   e
2   6   f

[[3]]
  num let
1   4   d
2   7   g
3   8   h

因为这个连接在已经连接的前一个数据帧上,所以我在第三个DF中有4 d,这是我不想要的.

我try 了.dir = "backward"作为一种使用原始DFS加入的方式,但这并没有做我认为它应该做的事情:

dfs |> 
   accumulate(~anti_join(.y, .x), .dir = "backward")

[[1]]
  num let
1   7   g
2   8   h

[[2]]
  num let
1   7   g
2   8   h

[[3]]
  num let
1   4   d
2   5   e
3   6   f
4   7   g
5   8   h

有没有办法将参数设置为accumulate,这样它就可以做到这一点,或者我需要一种不同的方法?如果可能的话,我更喜欢Purrr/TidyVerse,但我愿意接受任何能满足我需要的东西.

预期输出:

[[1]]
  num let
1   1   a
2   2   b
3   3   c
4   4   d

[[2]]
  num let
1   5   e
2   6   f

[[3]]
  num let
1   7   g
2   8   h

推荐答案

您可以使用accumulate2来实现滚动anti_join.

accumulate2(dfs, head(dfs, -1), ~ anti_join(..2, ..3))
[[1]]
  num let
1   1   a
2   2   b
3   3   c
4   4   d

[[2]]
  num let
1   5   e
2   6   f

[[3]]
  num let
1   7   g
2   8   h

R相关问答推荐

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

x[[1]]中的错误:脚注越界

随机森林回归:下拉列重要性

手动打印线型gplot

为什么在ggplot2中添加geom_text这么慢?

在RStudio中堆叠条形图和折线图

R -使用矩阵reshape 列表

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何在反曲线图中更改X标签

如何阻止围堵地理密度图?

整理曲线图、曲线图和点图

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

生存时间序列的逻辑检验

使用函数从R中的列中删除标高

在同一单元格中创建包含整数和百分比的交叉表

如何在矩阵图中按标准对数据进行分组以绘制矩阵

R/shiny APP:如何充分利用窗口?

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别

获取列位置