r - 从数据框中的前一列中减去每一列

我这里有一个非常简单的案例,我想从前一列中减去每一列。事实上,我正在寻找滑动减法,因为第一列保持原样,然后第一列减去第二列,第二列减去第三列,依此类推直到最后一列。 这是我的示例数据集:

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/

相关文章:

awk - 从使用 sed 获得的部分中获取上面的 N 行

javascript - 使 href 中带有哈希 (#) 的每个 anchor 标记都不可点击

python - Tensorflow Metal 插件已注册错误

javascript - React Native FlatList 刷新不起作用

git - 如何在 git pull 之前预览更改

kotlin - 如何获取数组 Kotlin 中特定值的大小

javascript - 如何使用对象从对象数组javascript中删除它?

javascript - 如何在reactjs中将csv文件数据转换为json对象?

awk - Unix 提取两行之间的行并将它们存储在各自的文件中

loops - 为什么内循环收集不返回结果?