繁体   English   中英

变异 R 中的多个列(tidyverse)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM