Можно ли в dplyr манипулировать набором входных данных? - PullRequest
0 голосов
/ 21 декабря 2018

Я применяю несколько фильтров и выбираю операции на фрейме данных с помощью dplyr.Можно ли напрямую изменить данные во входном объекте?

Итак, я хочу добиться чего-то вроде этого:

library(dplyr)
mtcars %>%
filter(mpg>20) %>%
select(cyl) <- mtcars %>%
filter(mpg>20) %>%
transmute(cyl=8)

Очевидно, это приводит к ошибке.

В базе R это будет выглядеть так:

mtcars[which(mtcars$mpg>20),"cyl"] <- 8
mtcars

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы не хотите трансмутировать, но mutate.

Ваш пример можно записать так:

mtcars2 <-  mtcars %>%
   filter(mpg>20) %>%
   select(cyl) %>% 
   filter(mpg>20) %>% 
   mutate(cyl=8)

Однако в нем есть недостатки, так как вы фильтруете на mpg после выбора только cyl.Более того, вы фильтруете дважды одно и то же условие, но я предполагаю, что это всего лишь видение вашего «множественных операций фильтрации и выбора».

Рабочий пример:

mtcars2 <-  mtcars %>%
   filter(mpg>20) %>%
   mutate(cyl=8)
0 голосов
/ 21 декабря 2018

Один из способов будет:

mtcars %>%
  mutate(cyl = ifelse(mpg > 20, 8, cyl))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...