为R中的每个ID生成日期和时间的顺序

问题描述 投票:1回答:2

我试图找出以这种格式创建日期和时间序列的方法: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

有没有人知道如何以我正在寻找请求的格式获取数据?

r time time-series posixct
2个回答
0
投票

你离我不太远。试试这个:

# 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
投票

这是一种方式:

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)
© www.soinside.com 2019 - 2024. All rights reserved.