2012-02-21 48 views
7

我在減去單個單元格中由日期和時間組成的表的兩列時遇到了問題。在R中減去兩個由日期和時間組成的列

> TimeData 

DEPARTURE_TIME  LAB_TIME 
1/30/2010 4:18  1/30/2010 0:29 
1/30/2010 4:18  1/30/2010 0:29 
1/30/2010 6:49  1/30/2010 0:48 
1/30/2010 6:49  1/30/2010 0:48 
1/30/2010 9:42  1/30/2010 1:29 
1/30/2010 9:42  1/30/2010 1:29 
1/30/2010 7:25  1/30/2010 1:16 

我需要獲得出發時間和實驗室時間之差(以小時和分鐘爲單位)。

我需要將時間和日期分開還是有辦法以這種方式減去數據?

我真的很感激任何幫助。

+0

是這些列的字符串或日期(在讀)? – 2012-02-21 05:15:52

回答

12

嘗試TimeData$DEPARTURE_TIME - TimeData$LAB_TIME

這取決於您的xxx_TIME列是字符串還是將它們轉換爲日期時間。

假設他們是字符串(他們已經使用read.csv或類似的東西讀過);然後將它們轉換爲日期時間對象可以使用as.POSIXct(見?as.POSIXctstrptime):

# convert the string columns to dates 
TimeData$DEPARTURE_TIME <- as.POSIXct(TimeData$DEPARTURE_TIME, 
             format='%m/%d/%Y %H:%M') 
TimeData$LAB_TIME  <- as.POSIXct(TimeData$LAB_TIME, 
             format='%m/%d/%Y %H:%M') 

注意format說法:看起來你是在月/日/年小時:分鐘(25小時制)格式。有關日期格式的更多信息,請參閱?strptime

然後計算差值,則可以執行:

diffs <- TimeData$DEPARTURE_TIME - TimeData$LAB_TIME 

其中挑選合適的時間單位爲你,也可以指定你可以使用difftime小時(見?difftime):

# like saying DEPARTURE_TIME-LAB_TIME but more control over the output 
diffs <- difftime(TimeData$DEPARTURE_TIME,TimeData$LAB_TIME,units="hours") 

生成的物體diffs看起來像這樣:

> diffs 
Time differences in hours 
[1] 3.816667 3.816667 6.016667 6.016667 8.216667 8.216667 6.150000 
attr(,"tzone") 
[1] "" 

要提取數字部分,請使用as.numeric(diffs)。 要將其轉換爲一個小時,向量和向量分鐘...好,60分鐘,第二等:

# use as.numeric(diffs) to retrieve just the vector. 
# let's convert to hours & minutes... 
diffs.hours <- floor(as.numeric(diffs)) 
diffs.minutes <- (as.numeric(diffs)%%1 * 60) 

給你:

> diffs.hours 
[1] 3 3 6 6 8 8 6 
> diffs.minutes 
[1] 49 49 1 1 13 13 9