首页 > 解决方案 > 使用 mutate_all 创建新列

问题描述

我有一些看起来像这样的数据:

  Year Revenue Cost Rent
1 2016    3000    4  100
2 2017    4000    5  100
3 2018    5000    6  100

df <- data.frame(stringsAsFactors=FALSE,
        Year = c(2016L, 2017L, 2018L),
     Revenue = c(3000L, 4000L, 5000L),
        Cost = c(4L, 5L, 6L),
        Rent = c(100L, 100L, 100L)
)

我想将所有内容划分为百分比Rent

library(dplyr)
df <- df %>% mutate_at(vars(Revenue:Rent), funs(. /Rent))

效果很好。

  Year Revenue Cost Rent
1 2016      30 0.04    1
2 2017      40 0.05    1
3 2018      50 0.06    1

唯一的事情:我失去了我原来的专栏。

我该怎么做mutate_all,以便我有新的列,比如说叫Revenue_percentage_of_rent, Cost_percentage_of_rent

标签: rdplyr

解决方案


将不推荐使用 offuns以支持listfromdplyr_0.8.0 所以,选项将是

library(dplyr)
df %>%
    mutate_at(vars(Revenue:Rent), list(percentage_of_rent = ~  ./Rent))
#  Year Revenue Cost Rent Revenue_percentage_of_rent Cost_percentage_of_rent Rent_percentage_of_rent
#1 2016    3000    4  100                         30                    0.04                       1
#2 2017    4000    5  100                         40                    0.05                       1
#3 2018    5000    6  100                         50                    0.06                       1

推荐阅读