如何使用 dplyr 计算列范围内两列的连续组之间的差异

用户2909302

我想使用 dplyr 计算一系列列中连续列之间的差异。

例如,使用iris数据集,我希望能够指定范围Sepal.Width:Petal.Width并拥有一个包含原始虹膜数据的数据以及来自 Sepal.Width:Petal.Width 的连续列之间的差异:

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species diff1 diff2
1          5.1         3.5          1.4         0.2  setosa   2.1   1.2
2          4.9         3.0          1.4         0.2  setosa   1.6   1.2
3          4.7         3.2          1.3         0.2  setosa   1.9   1.1
4          4.6         3.1          1.5         0.2  setosa   1.6   1.3
5          5.0         3.6          1.4         0.2  setosa   2.2   1.2
6          5.4         3.9          1.7         0.4  setosa   2.2   1.3

有人发布了一个解决方案 loops 和 lapply(计算data.table 中连续分组列之间的差异),但我正在专门寻找 dplyr 解决方案。

乔恩·斯普林

这是使用dplyrtidyr动词的不太先进的方法首先,我将要区分的列收集到长格式中,然后将它们与前一列的差异取出,去除没有前一列的第一列的 NA,重命名该列,展开并附加到原始列上。

library(tidyverse)
iris %>%
  bind_cols(iris %>%
    rowid_to_column() %>%
    gather(col, val, Sepal.Width:Petal.Width) %>%
    group_by(rowid) %>%
    mutate(val = abs(val - lag(val))) %>%
    filter(!is.na(val)) %>%
    mutate(col = paste0("diff_", col)) %>%
    spread(col, val)  %>%
    select(contains("diff"))
  )


    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species rowid diff_Petal.Length diff_Petal.Width
1            5.1         3.5          1.4         0.2     setosa     1               2.1              1.2
2            4.9         3.0          1.4         0.2     setosa     2               1.6              1.2
3            4.7         3.2          1.3         0.2     setosa     3               1.9              1.1
4            4.6         3.1          1.5         0.2     setosa     4               1.6              1.3
5            5.0         3.6          1.4         0.2     setosa     5               2.2              1.2
6            5.4         3.9          1.7         0.4     setosa     6               2.2              1.3
7            4.6         3.4          1.4         0.3     setosa     7               2.0              1.1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 dplyr 计算来自不同列的不同值之间的差异

来自分类Dev

如何计算两列结果之间的差异

来自分类Dev

如何使用dplyr清除特定的列?

来自分类Dev

如何使用dplyr修改因子列?

来自分类Dev

如何使用dplyr突变列的子集?

来自分类Dev

使用dplyr查找成对的列的差异

来自分类Dev

使用dplyr选择列

来自分类Dev

使用dplyr连接列

来自分类Dev

使用dplyr分组后如何计算新列

来自分类Dev

如何使用dplyr :: filter()删除观察组

来自分类Dev

如何使用dplyr按组进行子集

来自分类Dev

如何使用dplyr获取两列的平均值?

来自分类Dev

使用R中的dplyr建立组之间的差异

来自分类Dev

使用R中的dplyr建立组之间的差异

来自分类Dev

如何使用dplyr计算行平均比率

来自分类Dev

如何使用dplyr在行组之间进行划分?

来自分类Dev

如何使用dplyr在行组之间进行划分

来自分类Dev

如何使用dplyr的setdiff将数据分成两组

来自分类Dev

如何使用dplyr查找R数据框中两行中的值之间的差异

来自分类Dev

如何使用dplyr查找R数据框中两行中的值之间的差异

来自分类Dev

如何在Python另一列确定的单独连续范围内计算平均收益?

来自分类Dev

MYSQL如何计算日期范围内的列总和

来自分类Dev

使用dplyr获取列的值

来自分类Dev

在dplyr中使用列号

来自分类Dev

使用Dplyr添加比例列

来自分类Dev

使用R / dplyr过滤列?

来自分类Dev

使用 dplyr 动态访问列

来自分类Dev

如何确定两个值之间的差异是否落在awk的范围内?

来自分类Dev

使用dplyr按组计算每个块?