首页 > 解决方案 > 将数据框中的多列除以相邻列

问题描述

我有一个数据集,其中包含在具有特定优势树类型的地块中观察到的动物平均数量(列名是 H 或 B 表示树类型和数字表示地块)。它们与 B 列之前的所有 H 列交替排列,如下所示:

Survey<-c(1,2,3)
H1<-c(5,8,3)
B1<-c(6,3,9)
H2<-c(12,15,1)
B2<-c(3,17,8)

df<-as.data.frame(cbind(Survey,H1,B1,H2,B2))

我想将每个 H 向量除以右侧的 B 向量(例如,H1 中的 5/B1 中的 6,H2 中的 12/B2 中的 3),但我的实际数据集有 49 列和 9 行,所以我不想手动执行此操作。有什么方法可以将每隔一列除以右侧的列吗?

标签: r

解决方案


1) dplyr使用cross 如图:

library(dplyr)

ix <- seq(2, ncol(df), 2)
df %>% mutate(across(ix) / across(ix+1))

给予:

  Survey        H1 B1        H2 B2
1      1 0.8333333  6 4.0000000  3
2      2 2.6666667  3 0.8823529 17
3      3 0.3333333  9 0.1250000  8

2) Base R使用上面的 ix :

replace(df, ix, df[ix] / df[ix+1])

给予:

  Survey        H1 B1        H2 B2
1      1 0.8333333  6 4.0000000  3
2      2 2.6666667  3 0.8823529 17
3      3 0.3333333  9 0.1250000  8

推荐阅读