我有这样一个数据集:
data.frame(x = c(1:5), y = c(0:4), z = c(2:6))
x y z
1 1 0 2
2 2 1 3
3 3 2 4
4 4 3 5
5 5 4 6
我想得到这样的数据集:
x y z y-x z-y
1 1 0 2 -1 2
2 2 1 3 -1 2
3 3 2 4 -1 2
4 4 3 5 -1 2
5 5 4 6 -1 2
当我使用:
a <- a %>% mutate(across((x:z), ~. - lag(.)))
我得到:
x y z
1 NA NA NA
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
也就是说,变异是在同一列中做减法,而我需要在不同列中做减法,我该如何解决这个问题呢?
5条答案
按热度按时间nhn9ugyo1#
这里我不会使用
dplyr
,我会直接使用底数R:ogsagwnx2#
你可以用类似
这将返回
但会发出一个无法删除的警告。🤔
mefy6pfw3#
使用
dplyr
可以执行以下操作:创建于2022年12月27日,使用reprex v2.0.2
pbossiut4#
我们可以使用
across2
如果列名应为
-
而不是_
,或者使用两个
across
与dplyr
配合使用bbmckpt75#
这里有一个tidyr::pivot_longger + dplyr的方法,同样的代码可以用于任意数量的列。
结果