【问题标题】:Increment date for times after midnight [closed]午夜后时间的递增日期[关闭]
【发布时间】:2021-06-06 07:37:01
【问题描述】:

我得到了这个数据框:

       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)

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

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

【问题讨论】:

  • 试试:df[hour(df$bedtime) &lt; 12, "bedtime"] &lt;- df[hour(df$bedtime) &lt; 12, "bedtime"] + (24*60*60)
  • 是的,我已经尝试过了,但是出现了错误
  • 如何构建数据框?您是否有任何代码可用于重现示例中显示的 df?
  • 哦,是的,我的错!非常感谢您,这有效!唯一的问题是它不起作用,如果数据帧包含 NA。如果我无法删除这些案例,因为它们包含其他重要信息,我该如何处理?

标签: r dataframe datetime time


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多