Разверните даты и время во фрейме данных, пропустив для каждого параметра - PullRequest
0 голосов
/ 22 октября 2018

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

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)

Для каждого дня между 2013-01-01 и 2013-01-03 наблюдалось наблюдение в 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

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как альтернативный ответ:

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

)

0 голосов
/ 22 октября 2018

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

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]])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...