展开数据框中的日期和时间,每个参数都缺少

时间:2018-10-22 08:24:09

标签: r

我有以下数据集:

Eq

对于2013年1月1日至2013年1月3日之间的每一天,都在02:00:00时对这两个参数分别进行了观察。我将需要将此数据集扩展到全天24小时,还需要获取每天每个丢失时间的参数和值。我尝试通过创建一个具有2013-01-01至2013-01-03之间所有日期和时间的新data.frame并将其与obs数据框合并的方法进行尝试,但无法弄清楚如何使用每个参数名称和观察值缺少的日期和时间。 结果应如下所示:

Date<-c("2013-01-01 02:00:00","2013-01-02 02:00:00","2013-01-03 02:00:00","2013-01-01 02:00:00","2013-01-02 02:00:00","2013-01-03 02:00:00")
Parameter<-c("Par1","Par1","Par1","Par2","Par2","Par2")
conc<-c(1,4,3,2,6,5)
obs<-data.frame(Date,Parameter,conc)
obs$Date<-as.POSIXct(obs$Date)
obs$Parameter<-as.factor(obs$Parameter)
obs$conc<-as.numeric(obs$conc)

2 个答案:

答案 0 :(得分:1)

作为替代答案:

new.Date <- matrix(sapply(obs$Date,function(t) t + as.difftime(-2:21,units = "hours")),ncol=1)
new.Par  <- matrix(sapply(obs$Parameter,function(x)rep(x,24)),ncol=1)
new.conc <- matrix(sapply(obs$conc,function(x)rep(x,24)),ncol=1)

newData <- data.frame(
  Date      = as.POSIXct(new.Date, origin = "1970-01-01"),
  Parameter = new.Par,
  new.conc  = new.conc

答案 1 :(得分:0)

我不确定这是否正是您要提出的内容,因为您尝试获得的结果中包含了一些技巧,或者对我来说没有意义,但是请看一下:

expDate <- function(startTime,t_par,t_conc){
  if(is.character(startTime)){
    startTime <- as.POSIXct(startTime,origin= "1970-01-01")
  }

  nExp <- 24
  timeExpand <- as.difftime(0:nExp,units="hours")
  returnDF <- data.frame(
    Date      = startTime + timeExpand,
    Parameter = rep(t_par,nExp+1),
    conc      = rep(t_conc,nExp+1)
  )
  return(returnDF)
}

tempData <- apply(obs,1,function(x) expDate(x[1],x[2],x[3]))
newData <- data.frame()
for(i in 1:length(tempData)){
  newData <- rbind(newData,tempData[[i]])
}