有没有一种方法可以根据列的位置系统地划分列? 例如,使用这样的数据框:
df <- data.frame(id = ('a1', 'a2'), a = c(1, 0), b = c(4,0), c = c(4, 3), d = c(5, 10))
a | b | c | d |
---|---|---|---|
1 | 4 | 4 | 5 |
0 | 0 | 3 | 10 |
我想得到:
a | b | c | d | div_c | div_b | div_a |
---|---|---|---|---|---|---|
1 | 4 | 4 | 5 | 0.8 | 1 | 0.25 |
0 | 0 | 3 | 10 | 0.3 | 0 | NaN |
换句话说,从最后一列开始作为分子,前一列作为分子,直到第一列作为分子。 我知道我可以通过以下方式得到这个:
df %>% mutate(div_c = c/d, div_b = b/c, div_a = a/b)
但是,我的列比上面的示例多得多,所以我想知道是否有比键入每个新计算更好的方法。
我尝试了 mutate 和 across,但只有当操作/功能一致而不是移动目标时才有效。
提前谢谢您!
你可以做
> cbind(df, div=df[-c(1L, ncol(df))]/df[-(1:2)][, rev(ncol(df) - 2L)])
id a b c d div.a div.b div.c
1 a1 1 4 4 5 0.2 0.8 0.8
2 a2 0 0 3 10 0.0 0.0 0.3