【问题标题】:R convert number into timeR将数字转换为时间
【发布时间】:2015-07-01 16:59:47
【问题描述】:

有人在 Excel 中给了我非常糟糕的数据,其中日期(例如 2015 年 7 月 1 日)是 20150701,时间(例如 11:41:23)是 114123。有超过 50,000 行数据,我需要将这些都转换为适当的日期和时间对象。这些不是任何纪元的秒数​​,它只是没有破折号或冒号的日期或时间。

我将它们导入数据框并使用 ymd() 函数转换日期,但我找不到用于时间的函数,hms() 给我一个错误:

package(lubridate)
df <- readWorksheetFromFile(file="cktime2012.xls", sheet=1)
df$date <- ymd(df$date)
df$time <- hms(df$time)
# Warning message:
#  In .parse_hms(..., order = "HM", quiet = quiet) :
#   Some strings failed to parse

在运行最后一行之前,我得到了一个看起来像这样的数据框。一旦我运行最后一行,TIMEIN 列就会变成所有 NA:

DATEIN      TIMEIN  etc...
2012-02-01  200000  etc...
etc...

我需要它在所有 50,000 行中看起来像这样。我将 POSIXct 作为标签包含在内,因为我不知道是否有办法使用它来帮助转换:

DATEIN      TIMEIN      etc...
2012-02-01  20:00:00    etc...
etc...

【问题讨论】:

  • 如果您真正想要做的是将日期和时间以POSIXct 格式放在一个列中,那么您应该将DATEINTIMEIN 粘贴在一起并转换为POSIXct (使用任何答案来获得正确的格式)。

标签: r dataframe posixct lubridate


【解决方案1】:

如果TIMEIN 始终为六个字符(即,上午 10 点之前的时间前导零),那么您可以这样做:

df$TIMEIN = paste0(substr(df$TIMEIN,1,2),":",substr(df$TIMEIN,3,4),":", substr(df$TIMEIN,5,6))
df$TIMEIN = hms(df$TIMEIN)

【讨论】:

  • 当我这样做时,第一行将其转换为正确的 XX:XX:XX 格式,但是当我执行第二行时,所有单元格都变成零
  • 如果您发布一些重现问题的示例数据,将更容易弄清楚可能发生的情况。
  • 我所拥有的只是你在问题中看到的,但如果你只运行第一行代码,你的答案就完美了。然后我可以将它与 DATEIN 信息合并,它会给我一个正确的日期和时间列
【解决方案2】:

你也可以尝试这个来获得指定的时间,但是你也必须去掉日期。

> as.POSIXct("200000", format="%H%M%S")
[1] "2015-07-01 20:00:00 IST"

编辑- 好的,as.POSIXct() 适用于日期和时间。因此,要将整体合并为一个,您可以执行以下操作。

> as.POSIXct("20120201 200000", format="%Y%m%d %H%M%S")
[1] "2012-02-01 20:00:00 IST"

【讨论】:

  • @Frank 有没有办法将时间与另一行的日期合并,而不是显示今天的日期?这可以让我免于下一步我需要做的事情
  • 类似这样的:ymd_hms(paste(df$DATEIN, gsub("(..)", "\\1 ",df$TIMEIN)) 使用弗兰克评论中的答案。
【解决方案3】:

或者比上面的更简单,使用 tidyverse 中的管道可以得到:

# make sure you have dates stores as POSIXct 
# call in tidyverse library to make use of pipes and use the code bellow

df_hms <- df %>%
  mutate(time = hms::as.hms(TIMEIN))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多