How to use map from purrr with dplyr::mutate to create multiple new columns based on column pairs

前端 未结 8 702
無奈伤痛
無奈伤痛 2020-12-04 18:34

I have to following issue using R. In short I want to create multiple new columns in a data frame based on calculations of different column pairs in the data frame.

8条回答
  •  醉酒成梦
    2020-12-04 19:28

    Here is one option with purrr. We get the unique prefix of the names of the dataset ('nm1'), use map (from purrr) to loop through the unique names, select the column that matches the prefix value of 'nm1', add the rows using reduce and the bind the columns (bind_cols) with the original dataset

    library(tidyverse)
    nm1 <- names(df) %>% 
              substr(1, 1) %>%
              unique 
    nm1 %>% 
         map(~ df %>% 
                select(matches(.x)) %>%
                reduce(`+`)) %>%
                set_names(paste0("sum_", nm1)) %>%
         bind_cols(df, .)
    #    a1 b1 c1 a2 b2 c2 sum_a sum_b sum_c
    #1  1  4 10  9  3 15    10     7    25
    #2  2  5 11 10  4 16    12     9    27
    #3  3  6 12 11  5 17    14    11    29
    #4  4  7 13 12  6 18    16    13    31
    #5  5  8 14 13  7 19    18    15    33
    

提交回复
热议问题