我的数据格式如下。
x <- c("2012-03-01T00:05:55+00:00", "2012-03-01T00:06:23+00:00",
"2012-03-01T00:06:52+00:00")
实际数据很长。
我的目标是
答案 0 :(得分:2)
首先使用asPOSIXct
df = data.frame(x = c("2012-03-01T00:05:55+00:00", "2012-03-01T00:06:23+00:00",
"2012-03-01T00:06:52+00:00"))
df$times = as.POSIXct(df$x, format = "%Y-%m-%dT00:%H:%M+%S")
然后使用format
df$hour = format(df$times, '%H')
这会给你:
x times hour
1 2012-03-01T00:05:55+00:00 2012-03-01 05:55:00 05
2 2012-03-01T00:06:23+00:00 2012-03-01 06:23:00 06
3 2012-03-01T00:06:52+00:00 2012-03-01 06:52:00 06
或者您可以使用以下方式提取日期和时间:
df$date_hour = format(df$times, '%Y-%m-%d:%H')
有关更多信息,请参阅?strftime
它说&#34;转换规范由%引入,通常后跟单个字母或O或E,然后是单个字母。格式字符串中不属于转换规范的任何字符都按字面解释(并且%%赋予%)。广泛实施的转换规范包括:...%H
小时数十进制数(00-23)。作为一个特殊的异常,可以接受24:00:00的字符串输入,因为ISO 8601允许这些。&#34;
现在,您可以使用plyr::ddply
library(plyr)
ddply(df, .(hour), nrow)
hour V1
1 05 1
2 06 2
或
ddply(df, .(date_hour), nrow)
date_hour V1
1 2012-03-01:05 1
2 2012-03-01:06 2