преобразование даты (времени) в длинную форму данных - PullRequest
0 голосов
/ 29 января 2019

Это скриншот моего фрейма данных.Фрейм данных является длинным (каждая строка включает несколько измерений для каждого пациента_идентификатора).Количество повторных измерений (рядов) различно для каждого пациента.В программном обеспечении R я хочу создать новую переменную даты, поскольку каждая дата (по порядку) минус первая дата, и сохранить ее как дни.

enter image description here

1 Ответ

0 голосов
/ 29 января 2019

Используя dplyr, вы должны сгруппировать по id, а затем изменить его, чтобы добавить новый столбец следующим образом.

library(tidyverse)

# example data frame (always dput a simple piece of your data)
df <- structure(list(patient_id = c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
  2L, 2L), date = structure(c(17600, 17601, 17602, 17603, 17604, 
  17605, 17606, 17607, 17608, 17609), class = "Date")), class = "data.frame",
  row.names = c(NA, -10L)) 

Ключ заключается в том, чтобы сохранить вашу переменную даты как объект даты в вашем фрейме данных, таким образомВы можете сделать арифметику с этим.Для преобразования вашей переменной даты вы можете использовать функцию as_date из пакета lubridate.

df %>%
  group_by(patient_id) %>% # group by patient
  mutate(days_since_first_time = date - min(date)) %>% 
  arrange(patient_id, date)

# this is the output
patient_id  date        days_since_first_time
1           2018-03-10  0
1           2018-03-14  4
1           2018-03-18  8
2           2018-03-11  0
2           2018-03-12  1
2           2018-03-13  2
2           2018-03-15  4
2           2018-03-16  5
2           2018-03-17  6
2           2018-03-19  8
...