[英]Mutate multiple columns in R (tidyverse)
我对 R 有一个小问题。 我已经将 2 个数据集合并在一起,我必须计算它们之间的简单比率。 数据集不是那么小(每个数据集 18 列),我想避免使用简单的蛮力。
给你举个例子
df <- data.frame(a1= sample(1:100, 10), b1 = sample(1:100, 10), a2= sample(1:100, 10), b2 = sample(1:100,10))
比率只是一列除以另一列,因此在示例中它将是 c1=a1/b1 和 c2=a2/b2。 它可以通过以下方式简单地实现:
mutate(df, c1=a1/b1, c2=a2/b2)
我的问题是是否有办法使这个过程自动化并指示 R 在不手动输入所有公式的情况下执行变异,以便计算 c1、c2、c3 .... c18。
我尝试在列上设置子集的 for 循环,但我似乎无法使其在 tidyverse 中工作。
先感谢您
一种简单的基本 R 方法是执行以下操作:
for (i in 1:2) {
df[paste0("c", i)] <- df[paste0("a", i)] / df[paste0("b", i)]
}
但这取决于您的实际变量名称具有什么模式。
使用 tidyverse 工具的另一种方法(但可能有一种更优雅的方法):
library(tidyverse)
library(glue)
map_dfc(1:2, function(x) {
transmute(df, "c{x}" := .data[[glue("a{x}")]] / .data[[glue("b{x}")]])
}) %>%
bind_cols(df) %>%
relocate(starts_with("c"), .after = last_col())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.