我在数据框中有一个列,其中报告了事件发生的小时。只是几小时,而不是几分钟或几秒钟。 这被格式化为整数,但我想让R将其读作一小时(时间)。我已经检查了as.Date的文档,但没有什么可以帮助我。
我已尝试使用以下命令,但它会返回错误消息:
> attach(data)
> Hour <- as.Date(Hour, "%H")
但它返回以下错误消息:
Error in charToDate(x) :
character string is not in a standard unambiguous format
非常感谢,
詹卢卡
答案 0 :(得分:2)
日期对象是时间点 - 日期和时间也是如此。
如果您想将小时格式化为一种不错的格式,请使用sprintf
:
sprintf("%02d:00",1:24)
[1] "01:00" "02:00" "03:00" "04:00" "05:00" "06:00" "07:00" "08:00" "09:00"
[10] "10:00" "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "17:00" "18:00"
[19] "19:00" "20:00" "21:00" "22:00" "23:00" "24:00"
但这只是为了你想要漂亮的输出,而不是计算。
这是另一个想法。为小时整数创建一个类......
> h = 1:24
> class(h)="hours"
> h
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
attr(,"class")
[1] "hours"
到目前为止所做的就是添加'class'属性。我们来写一个格式方法:
format.hours<- function(x,...){sprintf("%02d:00",x)}
format.hours(h)
[1] "01:00" "02:00" "03:00" "04:00" "05:00" "06:00" "07:00" "08:00" "09:00"
[10] "10:00" "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "17:00" "18:00"
[19] "19:00" "20:00" "21:00" "22:00" "23:00" "24:00"
我们不想继续输入format
所以让我们把它挂钩到打印功能中:
> print.hours <- function(x,...){print(format(x))}
> h
[1] "01:00" "02:00" "03:00" "04:00" "05:00" "06:00" "07:00" "08:00" "09:00"
[10] "10:00" "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "17:00" "18:00"
[19] "19:00" "20:00" "21:00" "22:00" "23:00" "24:00"
甜。我们还可以使用小时类向量创建数据框列:
df = data.frame(h = as.numeric(h),x=runif(24)) ; class(df$h)="hours"
df
h x
1 01:00 0.74339236
2 02:00 0.61240165
3 03:00 0.65007809
4 04:00 0.24844327
5 05:00 0.80499618
如果您编写更多数据框方法,可以使最后一个示例更好地工作。
然后你可以继续编写小时类的算术方法,这样增加小时数就不会达到24(它只是mod 24 airthmetic),或者你可以修改它来包括分钟,秒和打包一个整体加载时钟处理代码....
但是我已经飞得很好了......
答案 1 :(得分:0)
我建议您从lubridate
包(http://cran.r-project.org/web/packages/lubridate/index.html)开始,该包具有一系列深思熟虑的时间处理函数。你最终可能不会使用它们,但文档肯定会让你思考整个问题,你肯定会发现它有用。
例如,您可以显式表示持续时间,然后将它们与传统的时间表示结合使用,例如日期或时间类:
> dminutes(3)
[1] "180s (~3 minutes)"
> Sys.Date()
[1] "2013-12-31"
> Sys.Date() - dminutes(3)
[1] "2013-12-30 23:57:00 UTC"
文档说,
"Details
When paired with date-times, these functions allow date-times to be manipulated in a method similar to object oriented programming. Period objects can be added to Date, POSIXct, and POSIXlt objects to calculate new date-times."