【问题标题】:Create multiple new variables that are calculated from existing variables创建多个根据现有变量计算的新变量
【发布时间】:2019-04-16 21:58:45
【问题描述】:

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

这是一些示例数据

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)

但我不知道如何实际做到这一点。任何帮助将不胜感激 - 谢谢!

【问题讨论】:

    标签: r dplyr iteration purrr


    【解决方案1】:

    这是一个选项,可以根据列名模式将数据集split 转换为 data.frame 的list,然后通过在每个数据集中的每对列上按元素划分并绑定 reduce 它原始数据集

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

    【讨论】: