从“yyyymmdd”提取小时

时间:2013-06-06 20:08:57

标签: r

这可能很多次被问过,但我找不到相关的资源,只是无法做到正确。我的数据框中包含HourStamp格式的yyyymmddHH列,我需要从中提取HH。我该怎么办?

举个例子:

HourStamp  Hour
2013050100   00
2013050101   01
2013050102   02
...

我需要添加Hour列。谢谢!

1 个答案:

答案 0 :(得分:8)

就像@Klaus已经评论过的那样,在这种情况下,一个简单的子句就会成功,即substr('2013050100', 9, 10)。请记住substr已经过矢量化,因此您只需执行以下操作:

df$Hour = substr(df$HourStamp, 9, 10)

处理日期/时间的一种更灵活,更强大的方法是简单地将HourStamp转换为真正的R日期对象:

d = strptime('2013050100', format = '%Y%m%d%H')
strftime(d, '%H')
[1] "00"

在这种情况下,strptime解决方案有点麻烦,但它允许以下内容:

> strftime(d, '%A %d of %B in the year %Y')
[1] "Wednesday 01 of May in the year 2013"

或:

strftime(d, 'file%Y%d.csv')
[1] "file201301.csv"

或以矢量化形式为您的示例:

df$time = strptime(df$HourStamp, format = '%Y%m%d%H')
df$Hour = strftime(df$time, '%H')