r - 将数据框中的多列除以相邻列
问题描述
我有一个数据集,其中包含在具有特定优势树类型的地块中观察到的动物平均数量(列名是 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 行,所以我不想手动执行此操作。有什么方法可以将每隔一列除以右侧的列吗?
解决方案
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
推荐阅读
- c# - ASP.NET-WEBFORMS,等待一个工作,直到他完成,当参数改变时
- vue.js - 如何在 Vue.js 中获取当前的 Elastic APM 实例?
- mysql - MySQL : 比赛选手的平均时间
- php - 添加简码时页面未更新,并且在 wordpress 插件开发期间也在 wordpress 仪表板中呈现简码内容
- mybatis - 在 myBatis-mapping 中按索引访问列表元素
- ios - Firebase 推送通知在上传到应用商店 ios 后不起作用
- python - 如何使用python pdfrw包使可填写的pdf只读pdf
- javascript - 如何在 React Native 中使用 Formik、Yup、Ui Kitten 的复选框和单选按钮
- c# - c# Core MVC不能访问非静态字段
- python - 列出从python中的日期范围排除