首页 > 解决方案 > 在 mutate (dplyr) 中创建新的列

问题描述

我有以下名为df的虚拟数据框:

A1 A2 A3 B1 B2 B3 C1 C2 C3
1  1  1  2  2  2  3  3  3

我想将包含相同字母的列汇总到一个新列中(使用相应的字母命名)。

我希望这个结果:

A1 A2 A3 B1 B2 B3 C1 C2 C3 A B C
1  1  1  2  2  2  3  3  3  3 6 9

我知道我可以使用mutatefrom来实现这个结果dyplr

mutate(df,
       A = A1 + A2 + A3,
       B = B1 + B2 + B3,
       C = C1 + C2 + C3)

有没有办法使用类似向量letters <- c("A", "B", "C")并在函数内循环该向量来做到这一点mutate?就像是:

mutate(df,
       letters = paste0(letters,"1") + paste0(letters,"2") + paste0(letters,"3") )

标签: rdplyr

解决方案


一种dplyr解决purrr方案可能是:

bind_cols(df, map_dfc(.x = LETTERS[1:3],
                      ~ df %>%
                       transmute(!!.x := rowSums(select(., starts_with(.x))))))

  A1 A2 A3 B1 B2 B3 C1 C2 C3 A B C
1  1  1  1  2  2  2  3  3  3 3 6 9

推荐阅读