使用purrr创建新变量(该怎么做?)

时间:2018-10-02 11:31:03

标签: r dplyr purrr mutate

我有一个很大的数据集,有一堆我想基于前缀或后缀在其上运行相同功能的列,以创建一个新变量。

我想做的是提供要映射的列表,并创建新变量。


dataframe <- data_frame(x_1 = c(1,2,3,4,5,6),
                        x_2 = c(1,1,1,2,2,2),
                        y_1 = c(200,400,120,300,100,100),
                        y_2 = c(250,500,150,240,140,400))

newframe <- dataframe %>% mutate(x_ratio = x_1/x_2,
                                 y_ratio = y_1/y_2)

过去,我用类似这样的字符串编写代码

code <- "df <- df %>% mutate(#_ratio = #_1/#_2)" %>% str_replace_all("#",c("x","y"))
eval(parse(text=code))) 

是否有可能符合以下要求: newframe <-dataframe%>%map(c(“ x”,“ y”),mutate(paste0(.x,“ _ ratio)= paste0(.x,” _ 1 /“ ,. x,” _ 2))

1 个答案:

答案 0 :(得分:1)

如果我们要使用map,则一种选择是用列名split来分隔数据集,并用reduce

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