如何系统地根据列位置对列进行操作?

问题描述 投票:0回答:1

有没有一种方法可以根据列的位置系统地划分列? 例如,使用这样的数据框:

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,但只有当操作/功能一致而不是移动目标时才有效。

提前谢谢您!

r
1个回答
0
投票

你可以做

> 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
© www.soinside.com 2019 - 2024. All rights reserved.