我得到了这个数据框:
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)
但现在我收到错误“维度数不正确”。
我不知道这个数据框有什么问题,变量的类型与其他变量相同。
答案 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))