Транспонировать и создавать новые переменные в R - PullRequest
0 голосов
/ 14 февраля 2020

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

study_id date
1        01/01/2011
2        01/01/2012
2        01/01/2013
3        01/01/2014
3        01/01/2015
3        01/01/2016

Я хотел бы изменить фрейм данных на:

study_id date_1      date_2    date_3
1        01/01/2011  NA         NA
2        01/01/2012  01/01/2013 NA
3        01/01/2014  01/01/2014 01/01/2016

Обратите внимание, что эти даты являются лишь примерами, дата не следует этому порядку (01.01.2011 + 1 год и так далее)

PS: Спасибо веб-программисту за редактирование моего вопроса. Я удалил, прежде чем заметил, что ты это исправил.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Вот подход tidyverse:

library(tidyverse)

df %>%
  group_by(study_id) %>%
  mutate(row_id = row_number()) %>%
  pivot_wider(id_cols = study_id, values_from = date, names_from = row_id, names_prefix = "date_")

Выход

# A tibble: 3 x 4
# Groups:   study_id [3]
  study_id date_1     date_2     date_3    
     <int> <chr>      <chr>      <chr>     
1        1 01/01/2011 NA         NA        
2        2 01/01/2012 01/01/2013 NA        
3        3 01/01/2014 01/01/2015 01/01/2016
1 голос
/ 14 февраля 2020

Мы можем использовать dcast от data.table

library(data.table)
dcast(setDT(df1), study_id ~ paste0("date_", rowid(study_id)), value.var = "date")
#study_id     date_1     date_2     date_3
#1:        1 01/01/2011       <NA>       <NA>
#2:        2 01/01/2012 01/01/2013       <NA>
#3:        3 01/01/2014 01/01/2015 01/01/2016
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...