создавать новые столбцы с mutate_all - PullRequest
3 голосов
/ 14 марта 2019

У меня есть некоторые данные, которые выглядят так:

  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?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Использование funs будет устаревшим в пользу list из dplyr_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
2 голосов
/ 14 марта 2019

Назовите столбец в функции как mutate_at

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

Вы можете сделать это с помощью mutate_all, но тогда он также разделит столбец Year на Rent, что, я полагаю, вы нене нужно

Обходной путь для использования mutate_all будет

df %>% select(-Year) %>% mutate_all(funs(percentage_of_rent = . /Rent))

, но вы потеряете здесь столбец Year.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...