2015-05-11 85 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