我有一份数据帧 list ,a
、b
和c
.我希望得到一个列表,其中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