用两行中的值减去所有列
Substracting all columns by the values in two rows
如果我想获取第 2 行中的所有列并将它们减去第 1 行中的值,我应该使用什么代码。我想在整个数据集中执行此操作。即第4行-第3行,第6行-第5行,依此类推。
数据
> 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()
.
如果我想获取第 2 行中的所有列并将它们减去第 1 行中的值,我应该使用什么代码。我想在整个数据集中执行此操作。即第4行-第3行,第6行-第5行,依此类推。
数据
> 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()
.