2015-05-11 44 views
3

我真的很努力与时间在R工作,并想知道是否有人可以提供帮助。在R的时间工作

对于采样数据帧:

df <- structure(list(Time = structure(1:9, .Label = c("07:55:40", "07:55:50", 
                 "07:56:00", "07:56:10", "07:56:20", "07:56:30", "07:56:40", "07:56:50", 
                 "07:57:00"), class = "factor")), .Names = "Time", class = "data.frame", row.names = c(NA, 
                                      -9L)) 

我使用下面的代码行时间转换为格式ř识别(start.time),然后加入10秒至start.time得到端。时间。

df$start.time <- strptime(df$Time, "%H:%M:%S") ##Correct 
df$end.time <- df$start.time + 10 

[R自动将当天的日期双方启动和end.time这不是我想要的东西 - 虽然我明白R.将希望有一个基准日为好,对于我而言,这是没有必要的。

如何排除日期?

+1

使用'lubridate'包使事情变得更容易。然后你可以做'df $ start.time + seconds(10)'。 – Gregor

+1

这里有一种方法:'format(df $ end.time,format =“%H:%M:%S”)'但我喜欢这种类型工作的** chron **包。 –

回答

1

请尝试在chron中使用"times"类。它代表一天中几分之一秒的时间,因此1秒钟是1/(24 * 60 * 60)。请注意,所有时间必须小于24:00:00:

> library(chron) 
> transform(df, Time = times(Time) + 10/(24 * 60 * 60)) 
     Time 
1 07:55:50 
2 07:56:00 
3 07:56:10 
4 07:56:20 
5 07:56:30 
6 07:56:40 
7 07:56:50 
8 07:57:00 
9 07:57:10 
+0

谢谢 - 这对我的示例数据框起作用,但为什么当我在我的真实数据上尝试这样做时,我会得到一个十进制数而不是一个时间?当我问R输入数据是什么类时,它说这是一个因素(这就是这个例子所说的)。出了什么问题? –

+1

你能否提出一个可重现的问题例子? –

1

我不明白你为什么创造了时间,因素是类。无论如何,这里是我与lubridate包解决方案。

首先将period类转换为hms函数,然后用seconds函数加上10秒。

library(lubridate) 
df$Time <- hms(df$Time) 
df[2] <- df[1] + seconds(10) 
head(df, 2) 
     Time  Time.1 
1 7H 55M 40S 7H 55M 50S 
2 7H 55M 50S 7H 55M 60S