创建根据现有变量计算出的多个新变量

时间:2018-11-14 00:58:00

标签: r dplyr iteration purrr

我试图弄清楚如何创建多个新变量,这些新变量是使用数据集中当前使用的变量计算出的

这是一些示例数据

library(tidyverse)

df <- data.frame(
 a1 = rnorm(100),
 a2 = rnorm(100),
 b1 = rnorm(100),
 b2 = rnorm(100),
 c1 = rnorm(100),
 c2 = rnorm(100)
)

基本上,我想为每个a,b,c对创建一个新变量,以a1除以a2,b1除以b2等。例如:

df <- df %>%
  mutate(a3 = a1/a2)

我的数据集中的变量没有遵循这些命名约定,所以我觉得我需要为向量分配名称:

numerators <- c('a1', 'b1', 'c1')
denominators <- c('a2', 'b2', 'c2') 

然后创建一个新变量将遵循基本约定

mutate(newvars = numerators/denominators)

但是我对如何实际执行此操作感到困惑。任何帮助将不胜感激-谢谢!

1 个答案:

答案 0 :(得分:1)

这里是一个选项,用于根据列名模式将数据集split list到data.frame中,然后reduce通过在每个列中的每一对列上按元素划分数据集并与原始数据集绑定

library(tidyverse)
df %>% 
   split.default(sub("\\d+", "", names(.))) %>% 
   map_df(reduce, `/`) %>% 
   rename_all(~paste0(., 3)) %>% 
   bind_cols(df, .)
相关问题