在 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 time
到NA
.
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
列拆分为 year
、month
、day
、hour
和 minutes
列。
有人可以帮忙吗?谢谢。
以下代码有效:
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
给定一个数据框如下:
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 time
到NA
.
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
列拆分为 year
、month
、day
、hour
和 minutes
列。
有人可以帮忙吗?谢谢。
以下代码有效:
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