【问题标题】:Create new columns lopping an array inside mutate (dplyr)在 mutate (dplyr) 中创建新的列
【发布时间】:2020-04-30 10:12:20
【问题描述】:

我有以下名为 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") )

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    dplyrpurrr 的一个解决方案可能是:

    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
    

    【讨论】:

    • 为什么一定要用!!在第一个 .x 之前而不是在第二个之前? (我已经尝试过,如果我删除 !! 新列将分别命名为 .x、.x1 和 .x2。如果我在第二个 .x 之前添加 !! 没有任何变化。奇怪)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2018-09-23
    • 2018-10-03
    相关资源
    最近更新 更多