我这里有一个非常简单的案例,我想从前一列中减去每一列。事实上,我正在寻找滑动减法,因为第一列保持原样,然后第一列减去第二列,第二列减去第三列,依此类推直到最后一列。 这是我的示例数据集:
structure(list(x = c(1, 0, 0, 0), y = c(1, 0, 1, 1), z = c(0,
1, 1, 1)), class = "data.frame", row.names = c(NA, -4L))
和我想要的输出:
structure(list(x = c(1, 0, 0, 0), y = c(0, 0, 1, 1), z = c(-1,
1, 0, 0)), class = "data.frame", row.names = c(NA, -4L))
我个人正在寻找具有 purrr
系列函数的解决方案。我也考虑过 slider
但我对后者不太熟悉。因此,我将提前感谢这两个软件包的任何帮助和想法。非常感谢。
最佳答案
一个简单的 dplyr
解决方案-
cur_data()
inside mutate/summarise 只是创建一个完整的副本。所以cur_data()[-1]
中减去cur_data()[-ncol(.)]
pmap_df
你可以做类似的事情df <- structure(list(x = c(1, 0, 0, 0), y = c(1, 0, 1, 1), z = c(0,
1, 1, 1)), class = "data.frame", row.names = c(NA, -4L))
library(dplyr)
df %>%
mutate(cur_data()[-1] - cur_data()[-ncol(.)])
#> x y z
#> 1 1 0 -1
#> 2 0 0 1
#> 3 0 1 0
#> 4 0 1 0
同样
pmap_dfr(df, ~c(c(...)[1], c(...)[-1] - c(...)[-ncol(df)]))
https://stackoverflow.com/questions/67774357/