0

我正在尝试将时间与其相应的日期结合起来,但遇到了麻烦。日期和时间在一个列表中,其中日期后跟该日期的时间。这种模式以不规则的方式继续。

这是我到目前为止所尝试的:

z = as.data.frame(c("2014-12-01", "7:00", "8:00", "9:00"))
z$x = llply(z[[1]], as.Date, format = "%Y-%m-%d")
names(z) = c("a", "b")
dp = function (x) {x = z$b
                  if(class(x) != "Date") {paste(z$a, x)} else {x = z$b}}
as.data.frame(llply(z, dp))[1]

我得到:

             a
1 2014-12-01 16405
2          7:00 NA
3          8:00 NA
4          9:00 NA

我在找:

             a
1 2014-12-01
2          7:00 2014-12-01
3          8:00 2014-12-01
4          9:00 2014-12-01

理想情况下,我想要一个将日期和时间组合成单个日期时间对象的解决方案。

请帮助...谢谢

4

1 回答 1

1

如果您需要一个日期时间对象

library(data.table)
setDT(df)[, as.POSIXct(paste(v1[1], v1[-1]), format='%Y-%m-%d %H:%M'), by=gr]
#    gr                  V1
#1:  1 2014-12-01 07:00:00
#2:  1 2014-12-01 08:00:00
#3:  1 2014-12-01 09:00:00
#4:  2 2014-12-02 06:00:00
#5:  2 2014-12-02 09:00:00

或者,如果您需要它format在结果中显示

 setDT(df)[, c(v1[1],paste(v1[-1], v1[1])) , by=gr]
 #   gr              V1
 #1:  1      2014-12-01
 #2:  1 7:00 2014-12-01
 #3:  1 8:00 2014-12-01
 #4:  1 9:00 2014-12-01
 #5:  2      2014-12-02
 #6:  2 6:00 2014-12-02
 #7:  2 9:00 2014-12-02

数据

v1 <- c("2014-12-01", "7:00", "8:00", "9:00", "2014-12-02", "6:00", "9:00")
indx <- grepl('-', v1)
df <- data.frame(v1, gr=cumsum(indx), stringsAsFactors=FALSE)
于 2014-12-05T04:57:57.750 回答