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

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)

Для каждого дня в период с 01.01.2013 по 03.01.2013 в 02:00:00 проводились наблюдения для каждого из 2 параметров. Мне нужно будет расширить этот набор данных до полных 24-часовых дней, а также взять параметр и значение для каждого пропущенного времени за каждый день. Я попробовал создать новый data.frame со всеми датами и временем между 2013-01-01 и 2013-01-03, а затем объединить его с фреймом данных obs, но я не могу понять, как использовать каждое имя параметра и значение наблюдения на недостающие даты и время. Результат должен выглядеть так:

Date                       Parameter conc
2013-01-01 00:00:00      Par1        1
2013-01-01 01:00:00      Par1        1
2013-01-01 02:00:00      Par1        1
.
. 
.
2013-01-01 23:00:00      Par1        1
2013-01-02 00:00:00      Par1        4
2013-01-02 01:00:00      Par1        4  
2013-01-02 02:00:00      Par1        4
.
.
.
2013-01-02 23:00:00      Par1        4   
2013-01-03 00:00:00      Par1        3
2013-01-03 01:00:00      Par1        3
2013-01-03 02:00:00      Par1        3
.
.
.
2013-01-03 23:00:00      Par1        3
2013-01-01 00:00:00      Par2        2
2013-01-01 01:00:00      Par2        2
2013-01-01 02:00:00      Par2        2
.
.
.
2013-01-01 23:00:00      Par2        2
2013-01-02 00:00:00      Par2        6
2013-01-02 01:00:00      Par2        6   
2013-01-02 02:00:00      Par2        6
.
.
.
2013-01-02 23:00:00      Par2        6
2013-01-03 00:00:00      Par2        5
2013-01-03 01:00:00      Par2        5
2013-01-03 02:00:00      Par2        5
.
.
.
2013-01-03 23:00:00      Par2        5
r
0
Matt 22 Окт 2018 в 11:24

2 ответа

Лучший ответ

В качестве альтернативного ответа:

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
HolgerBarlt 22 Окт 2018 в 11:17

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

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]])
}
0
HolgerBarlt 22 Окт 2018 в 11:05
52925067