R将数字转换为时间
R convert number into time
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...
如果 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)
你也可以试试这个来获得指定的时间,但是你也必须去掉日期。
> 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"
或者比上面的更简单,使用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))
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...
如果 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)
你也可以试试这个来获得指定的时间,但是你也必须去掉日期。
> 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"
或者比上面的更简单,使用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))