Как назначить переменную на основе группы по переменной? - PullRequest
1 голос
/ 11 октября 2019

У меня есть следующий фрейм данных

filenumber<-c('510-1','510-1','510-2','510-3','510-3')
Year<-c('2017','2018','2018','2018','2019')
outcome<-c('Accepted',"Completed","Accepted","Accepted","Completed")

df<-data.frame(filenumber,Year,outcome)

Я хочу убедиться, что если filenumber было Accepted в данном Year, я называю все файлы, связанные с этим Year, какнапример, "когорта", за которой следует год, в котором она была принята

df%>%group_by(filenumber)%>%mutate(cohort=case_when(Year=='2017' & outcome=='Accepted'~'cohort-2017',
                                                    Year=='2018' & outcome=='Accepted'~'cohort-2018'))

 filenumber Year  outcome   cohort     
 510-1      2017  Accepted  cohort-2017
 510-1      2018  Completed NA         
 510-2      2018  Accepted  cohort-2018
 510-3      2018  Accepted  cohort-2018
 510-3      2019  Completed NA     

Однако я хочу убедиться, что когорта применяется к номеру файла, в качестве результата которого указан Accepted, поэтому я могу что-то вроде этого

 filenumber Year  outcome   cohort     
 510-1      2017  Accepted  cohort-2017
 510-1      2018  Completed cohort-2017         
 510-2      2018  Accepted  cohort-2018
 510-3      2018  Accepted  cohort-2018
 510-3      2019  Completed cohort-2018     

Как мне это сделать

1 Ответ

0 голосов
/ 11 октября 2019

Мы можем использовать fill из tidyr в конце

library(dplyr)
library(tidyr)
df%>%
  group_by(filenumber)%>%mutate(cohort=case_when(Year=='2017' & 
    outcome=='Accepted'~'cohort-2017',
               Year=='2018' & outcome=='Accepted'~'cohort-2018')) %>% 
  fill(cohort)
# A tibble: 5 x 4
# Groups:   filenumber [3]
#  filenumber Year  outcome   cohort     
#  <fct>      <fct> <fct>     <chr>      
#1 510-1      2017  Accepted  cohort-2017
#2 510-1      2018  Completed cohort-2017
#3 510-2      2018  Accepted  cohort-2018
#4 510-3      2018  Accepted  cohort-2018
#5 510-3      2019  Completed cohort-2018

Это также может быть упрощено. После группировки по 'filenumber', match строка 'Accepted' в 'result', чтобы получить числовой индекс, основанный на этом индексе, задает поднабор 'Year' и paste строку 'cohort-', чтобы создать 'Когортный столбец

library(stringr)
df %>% 
    group_by(filenumber) %>% 
    mutate(cohort = str_c('cohort-', Year[match('Accepted', outcome)]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...