Генерация последовательности дат и времени для каждого идентификатора в R - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь выяснить способ создания последовательности дат и времени в этом формате: 2018-01-01 с 01:00 до 2018-03-30 01:00 для каждого пациента и заполнить новое пустое значение с помощьюслучайные числа.

Мои данные выглядят так:

Patients       temperature     
Patient1           37          
Patient2           36
Patient3           35.4

Я хочу, чтобы данные выглядели как

Patients       temperature       Time  
Patient1           37           2018-01-01 01:00
Patient2           36           2018-01-01 01:00
Patient3           35.4         2018-01-01 01:00
Patient1           NA           2018-01-01 02:00
Patient2           NA           2018-01-01 02:00
Patient3           NA           2018-01-01 02:00
Patient1           NA           2018-01-01 03:00
Patient2           NA           2018-01-01 03:00
Patient3           NA           2018-01-01 03:00

Таким образом, переменная времени будет действовать до 2018-03 гг.-30 01:00 и температура может быть NA, а затем я генерирую случайные числа, но не повторяю одинаковые значения температуры для каждого пациента.

Я пробовал эти команды, но не работал, и я незнаю, как назначить время каждому пациенту

Time <- seq (from=as.POSIXct("2018-1-1 01:00"), to=as.POSIXct("2018-3-30 01:00", tz="UTC"), by="hour")

И я тоже пробовал эту команду, но я получил сообщение об ошибке:

dt = data.table(ID = Sensor7$StationID,Time = seq (from=as.POSIXct("2018-01-01 02:00"), to=as.POSIXct("2018-03-30 01:00",format = "%Y-%m-%d %H:%M",by="hour")))

Но оно выдало мне сообщение об ошибке:

Error in seq.POSIXt(from = as.POSIXct("2018-01-01 00:00"), to = as.POSIXct("2018-03-30 23:00",  : 
  exactly two of 'to', 'by' and 'length.out' / 'along.with' must be specified

У кого-нибудь есть идеи, как получить данные в формате, который я ищу?

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Вы были не слишком далеко. Попробуйте это:

# I reproduce your data:

library(data.table)
data = data.table::fread(input = 
"Patients,temperature     
Patient1,37          
Patient2,36
Patient3,35.4")

library(dplyr)

Time <- seq (from=as.POSIXct("2018-1-1 01:00"), to=as.POSIXct("2018-3-30 01:00", tz="UTC"), by="hour")

И это должно делать то, что вы хотите:

data %>% 
  group_by(Patients) %>% 
  do({data.frame("temperature" = c(.data$temperature, rep(NA,length(Time) - nrow(.data))), Time)})

0 голосов
/ 23 марта 2019

Вот один из способов:

dat = data.frame(Patients=paste0("Patients", 1:3), temperature=c(37,36,35.4))

Time = seq(as.POSIXct("2018-01-01 01:00"), as.POSIXct("2018-03-30 01:00"), by="hour")

new.data = data.frame(
  Patient = rep(dat$Patients, each=length(Time)),
  Time = rep(Time, length(dat$Patients))
)

Я не уверен, как вы хотите генерировать случайные значения, но вот обобщенный метод:

new.data$Random.Temperature = rnorm(nrow(new.data), 35, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...