【问题标题】:Substracting all columns by the values in two rows用两行中的值减去所有列
【发布时间】:2020-07-18 03:20:56
【问题描述】:

如果我想获取第 2 行中的所有列并用第 1 行中的值减去它们,我应该使用什么代码。我想在整个数据集中执行此操作。即第 4 行 - 第 3 行,第 6 行 - 第 5 行,以此类推。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。

标签: r rows subtraction


【解决方案1】:

数据

> mtcars[1:3, ]
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

使用基础 R

as.data.frame(lapply(mtcars[1:3, ], function(x) c(NA, diff(x))))

  mpg cyl disp  hp  drat     wt qsec vs am gear carb
1  NA  NA   NA  NA    NA     NA   NA NA NA   NA   NA
2 0.0   0    0   0  0.00  0.255 0.56  0  0    0    0
3 1.8  -2  -52 -17 -0.05 -0.555 1.59  1  0    0   -3

使用 dplyr:

library(dplyr)

选项 1

> mutate(mtcars[1:3, ], across(everything(), ~. - lag(.)))
  mpg cyl disp  hp  drat     wt qsec vs am gear carb
1  NA  NA   NA  NA    NA     NA   NA NA NA   NA   NA
2 0.0   0    0   0  0.00  0.255 0.56  0  0    0    0
3 1.8  -2  -52 -17 -0.05 -0.555 1.59  1  0    0   -3

选项 2

> mutate_all(mtcars[1:3, ], ~. - lag(.))
  mpg cyl disp  hp  drat     wt qsec vs am gear carb
1  NA  NA   NA  NA    NA     NA   NA NA NA   NA   NA
2 0.0   0    0   0  0.00  0.255 0.56  0  0    0    0
3 1.8  -2  -52 -17 -0.05 -0.555 1.59  1  0    0   -3

在这段代码中,~. - lag(.)function(x) x - lag(x) 一样是一个匿名函数。

如果您的数据包含非数字变量,为了不出错,您可以使用mutate_if(your_data, is.numeric, ~. - lag(.)) 或带有新方法across() 的变体。

【讨论】:

  • 如果这是您要找的,请接受答案。
猜你喜欢
  • 2021-12-16
  • 2014-11-22
  • 2020-02-19
  • 1970-01-01
  • 2016-05-08
  • 2019-09-09
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多