От длинных до широкоформатных категориальных переменных и дат - PullRequest
0 голосов
/ 20 мая 2019

Я хочу создать набор данных в длинном формате с категориальной переменной (лекарство), у которого есть начальная и конечная даты в широком формате.В результате должна быть одна строка для каждого идентификатора, а для каждого лекарства - столбец, в котором есть запись 1/0, либо пациент получил лекарство, либо нет.И столбец лекарства должен иметь соответствующую дату начала и окончания в качестве дополнительных столбцов.

Я хотел

test <- data.frame(
  PatID  = c(1L, 1L, 2L, 2L, 3L, 4L,4L),
  medication = c("Jak","Others", "HU", "Inf","Others", "HU","Others"),  startDate   = c("2016-12-14", "2017-02-04", "2016-03-26", "2016-06-13", "2012-27-03", "2012-04-21", "2010-02-03"),
  endDate   = c("2018-11-14", "2018-02-25", "2017-06-13", "2017-11-12", "2018-27-03", "2016-04-30", "2016-08-16")
)

Вывод должен быть следующим:

ID   Jak   Jak_startDate   Jak_endDate   HU   HU_startDate   HU_endDate   Inf   Inf_startDate   Inf_endDate   Others   Others_startDate   Others_endDate <br/>
1    1      2016-12-14    2018-11-14     0     NA                NA        0        NA             NA            1      2017-02-04        2018-02-25
2    0         NA               NA       1   2017-06-13   2017-11-12       1   2018-03-27   2016-04-30           0         NA               NA
3    0         NA               NA       0     NA                NA        0        NA             NA            1      2012-27-03        2018-27-03
4    0         NA               NA       1   2012-04-21   2016-04-30       0        NA             NA            1      2010-02-03        2016-08-16

1 Ответ

0 голосов
/ 20 мая 2019

Используя tidyverse вот что я сделал:

test %>% 
gather(key, value, - PatID, -medication) %>% 
arrange(PatID, value) %>% 
mutate(new_key = paste(medication, key, sep = "_")) %>% 
select(PatID, new_key, value) %>% 
spread(new_key, value) %>% 
left_join(test %>% select(PatID, medication) %>% 
mutate(ind = 1) %>% 
spread(medication, ind))

Здесь я делаю данные длиннее, затем arrange это в соответствии с PatID и value. Затем я создаю в новом ключевом столбце new_key и select только три переменные: PatID, new_key и value. Затем я превращаю все это в широкие данные, но нам все еще нужны столбцы Jak, HU и т. Д., Которые кажутся переменными индикатора. Для этого в left_join я беру тестовые данные и spread, чтобы получить запрошенные вами столбцы.

...