午夜之后时间的增量日期

时间:2021-03-08 12:03:23

标签: r datetime time

我得到了这个数据框:

       bedtime           waketime
 2021-01-01 21:55:00  2021-01-02 09:00:00
 2021-01-02 00:15:00  2021-01-03 08:45:00
 2021-01-03 01:05:00  2021-01-04 08:40:00
 2021-01-04 02:01:00  2021-01-05 10:50:00
 2021-01-05 00:20:00  2021-01-06 08:45:00
 2021-01-06 02:25:00  2021-01-07 10:55:00
 2021-01-07 00:25:00  2021-01-08 06:45:00
 2021-01-08 00:10:00  2021-01-09 09:15:00
 2021-01-09 00:20:00  2021-01-10 08:15:00
 2021-01-10 00:00:00  2021-01-11 08:45:00

我想更改午夜(+ 1 天)之后的日期。

我之前使用不同的数据框使用此代码完成了此操作,并且效果很好

df[hour(df$bedtime) < 12, "bedtime"] <- df$bedtime[hour(df$bedtime) < 12, "bedtime"] + (24*60*60)

但现在我收到错误“维度数不正确”。

我不知道这个数据框有什么问题,变量的类型与其他变量相同。

1 个答案:

答案 0 :(得分:1)

使用 which 试试这个,它可以让您摆脱 NA 的问题。

d[] <- lapply(d, as.POSIXct)  ## first transform to POSIX if isn't yet
d <- transform(d, bedtime.old=bedtime, waketime.old=waketime)  ## copy for demonstration

ix <- which(strftime(d$bedtime, "%H") < 12)
d[ix, "bedtime"] <- d[ix, "bedtime"] + 24*60*60
d
#                bedtime            waketime         bedtime.old        waketime.old
# 1  2021-01-01 21:55:00 2021-01-02 09:00:00 2021-01-01 21:55:00 2021-01-02 09:00:00
# 2  2021-01-03 00:15:00 2021-01-03 08:45:00 2021-01-02 00:15:00 2021-01-03 08:45:00
# 3  2021-01-04 01:05:00 2021-01-04 08:40:00 2021-01-03 01:05:00 2021-01-04 08:40:00
# 4  2021-01-05 02:01:00 2021-01-05 10:50:00 2021-01-04 02:01:00 2021-01-05 10:50:00
# 5  2021-01-06 00:20:00 2021-01-06 08:45:00 2021-01-05 00:20:00 2021-01-06 08:45:00
# 6  2021-01-07 02:25:00                <NA> 2021-01-06 02:25:00                <NA>
# 7  2021-01-08 00:25:00 2021-01-08 06:45:00 2021-01-07 00:25:00 2021-01-08 06:45:00
# 8  2021-01-09 00:10:00 2021-01-09 09:15:00 2021-01-08 00:10:00 2021-01-09 09:15:00
# 9                 <NA> 2021-01-10 08:15:00                <NA> 2021-01-10 08:15:00

数据:

d <- structure(list(bedtime = c("2021-01-01 21:55:00", "2021-01-02 00:15:00", 
"2021-01-03 01:05:00", "2021-01-04 02:01:00", "2021-01-05 00:20:00", 
"2021-01-06 02:25:00", "2021-01-07 00:25:00", "2021-01-08 00:10:00", 
NA, "2021-01-10 00:00:00"), waketime = c("2021-01-02 09:00:00", 
"2021-01-03 08:45:00", "2021-01-04 08:40:00", "2021-01-05 10:50:00", 
"2021-01-06 08:45:00", NA, "2021-01-08 06:45:00", "2021-01-09 09:15:00", 
"2021-01-10 08:15:00", "2021-01-11 08:45:00")), class = "data.frame", row.names = c(NA, 
-10L))
相关问题