在 R 中解析 "m/%d/%Y %H:%M" 形式的日期时间

Parse "m/%d/%Y %H:%M" form of datetime in R

给定一个数据框如下:

df <- structure(list(time = structure(1:10, .Label = c("1/1/2001 0:00", 
"1/1/2001 1:00", "1/1/2001 2:00", "1/1/2001 3:00", "1/1/2001 4:00", 
"1/1/2001 5:00", "1/1/2001 6:00", "1/1/2001 7:00", "1/1/2001 8:00", 
"1/1/2001 9:00"), class = "factor"), values = c(19.94, 19.94, 
12.92, 15.08, 12.02, 12.02, 12.02, 12.92, 12.92, 8.96)), class = "data.frame", row.names = c(NA, 
-10L))

对于time列,它表示:m/%d/%Y %H:%M,但是当我用下面的代码解析它们时,代码return timeNA .

df$time <- strptime(df$time, format="m/%d/%Y %H:%M")
df$time <- as.Date(df$time, format="%m/%d/%Y %H:%M")
df$time

输出:

[1] NA NA NA NA NA NA NA NA NA NA NA

最后,我需要将 time 列拆分为 yearmonthdayhourminutes 列。

有人可以帮忙吗?谢谢。

以下代码有效:

df$time <- lubridate::mdy_hm(df$time)

df %>%
  separate(time, into = c('year', 'month', 'day', 'hour'))

您只是在格式字符串的开头忘记了 %,这应该有效:

strptime(df$time, format="%m/%d/%Y %H:%M")

lubridate 中的函数允许从 POSIXct 个对象中提取您想要的值。

library(dplyr)
library(lubridate)

df %>%
  mutate(time = mdy_hm(time), 
         year = year(time), 
         month = month(time), 
         day = day(time), 
         hour = hour(time), 
         minute = minute(time), 
         weekday = wday(time))


#                  time values year month day hour minute weekday
#1  2001-01-01 00:00:00  19.94 2001     1   1    0      0       2
#2  2001-01-01 01:00:00  19.94 2001     1   1    1      0       2
#3  2001-01-01 02:00:00  12.92 2001     1   1    2      0       2
#4  2001-01-01 03:00:00  15.08 2001     1   1    3      0       2
#5  2001-01-01 04:00:00  12.02 2001     1   1    4      0       2
#6  2001-01-01 05:00:00  12.02 2001     1   1    5      0       2
#7  2001-01-01 06:00:00  12.02 2001     1   1    6      0       2
#8  2001-01-01 07:00:00  12.92 2001     1   1    7      0       2
#9  2001-01-01 08:00:00  12.92 2001     1   1    8      0       2
#10 2001-01-01 09:00:00   8.96 2001     1   1    9      0       2