我有这样一个数据框:
df <- data.frame(a = c(1,2,3,4),
b = c(5,6,7,8),
c = c(22,33,44,55),
d = c(7,8,9,10),
e = c(2,3,4,5),
f = c(99,88,66,44))
df
a b c d e f
1 1 5 22 7 2 99
2 2 6 33 8 3 88
3 3 7 44 9 4 66
4 4 8 55 10 5 44
我希望每2列(或n的倍数)除以前2列(或n列):
df$c <- df$c / df$a
df$d <- df$d / df$b
df$e <- df$e / df$a
df$f <- df$f / df$b
df$a <- df$a / df$a
df$b <- df$b / df$b
导致:
df
a b c d e f
1 1 1 22.00000 1.400000 2.000000 19.800000
2 1 1 16.50000 1.333333 1.500000 14.666667
3 1 1 14.66667 1.285714 1.333333 9.428571
4 1 1 13.75000 1.250000 1.250000 5.500000
是否有一种方法可以更简单地和/或使用dplyr
来完成此操作?
2条答案
按热度按时间qgzx9mmu1#
我们可以复制这些列,然后除以
base R
或者,对于
dplyr
,使用across
在交替列上循环以执行除法或者使用具有
if/else
条件的单个across
或者,另一种方法是将数据
split
为区块并划分enxuqcxy2#
@akrun发现了几乎所有的可能性,但我认为这个变异也值得呈现:其思想是将 Dataframe 分为两部分,偶数列索引和奇数列索引分别对每个列索引进行计算,并在最后使用
bind_cols
在一次运行中绑定它们: