【发布时间】:2020-07-18 03:20:56
【问题描述】:
如果我想获取第 2 行中的所有列并用第 1 行中的值减去它们,我应该使用什么代码。我想在整个数据集中执行此操作。即第 4 行 - 第 3 行,第 6 行 - 第 5 行,以此类推。
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
标签: r rows subtraction
如果我想获取第 2 行中的所有列并用第 1 行中的值减去它们,我应该使用什么代码。我想在整个数据集中执行此操作。即第 4 行 - 第 3 行,第 6 行 - 第 5 行,以此类推。
【问题讨论】:
标签: r rows subtraction
数据
> 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() 的变体。
【讨论】: