используя Tidyverse для создания переменной, а не базы R - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть данные, которые имеют месяц приема.Я хотел бы сделать то же самое в чистом виде

df$qrtr[df$amonth %in% 1:3]<- "a"    
df$qrtr[df$amonth %in% 4:6] <- "b"    
df$qrtr[df$amonth %in% 7:9]<- "c"    
df$qrtr[df$amonth %in% 10:12]<- "d"

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Почему бы не использовать lubridate для этого?если столбец «amonth» является объектом даты, вы можете

df %>% mutate(qtr = lubridate::floor_date(amonth, "3 month"))
0 голосов
/ 08 февраля 2019

Как предложил @Tung, можно использовать case_wp dplyr:

df %>% 
  mutate(qtr = case_when(
   .$amonth %in% 1:3) ~ 'a',
   .$amonth %in% 4:6) ~ 'b',
   .$amonth %in% 7:9) ~ 'c',
   .$amonth %in% 10:12) ~ 'd',
   TRUE ~ NA))

Несколько более читаемый подход - это комбинация.Метод трубопровода dplyr предназначен для улучшения читабельности, поэтому комбинация может быть сделана в виде:

seasons <- rep(c('a','b','c','d'), each=3)
df %>% mutate(qtr=seasons[amonth])

, который, возможно, перепрыгивает через ожог, чтобы получить воду, поскольку вторая строка эквивалентна df$qtr <- seasons[df$amonth].Но, в сочетании с другими операциями, одна или другая является более подходящей.

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