2017-04-01 137 views
1

我最近開始在R中工作,通過excel文件進​​行操作和查詢。我有一個名爲my_File.csv的excel文件保存在我的桌面上。這是我到目前爲止有:R中減去時間

fileOpened <- sprintf("/Users/JimToby/Desktop/my_File.csv") 

myFile <- as.data.frame(table(fileOpened[, c('user', 'time', 'event')])) 

MYFILE給我留下了一個表看起來像這樣:

用戶|時間|

use1 | 2011-07-25 13:08 |

use1 | 2011-08-06 2:37 |

use2 | 2011-07-25 13:08 |

.....

我想要做的就是添加在每個用戶的每個時間差的另一列。例如,該列可以被稱爲timeDiff,而對於use1,只會有一個結果2011-08-06 2:37 - 2011-07-25 13:08。我將如何計算並將其合併到我的表中?

在此先感謝。

+2

請不要添加rstudio標籤,除非您有關於rstudio的具體問題。 R和rstudio是獨立的軟件。 – lmo

回答

2

一旦你將數據轉換爲實際的時間格式,你可以只減去。您的示例數據只有user2的開始,所以我添加了結束時間,以便有一個真實的示例。我假定你有時間作爲字符串,並且你想存儲的時間差回到同一data.frame

myFile = read.table(text='user time 
use1 "2011-07-25 13:08" 
use1 "2011-08-06 2:37" 
use2 "2011-07-25 13:08" 
use2 "2011-08-04 3:45"', 
header=TRUE, stringsAsFactors=FALSE) 

T2 = as.POSIXct(myFile$time) 
EndTime = seq(2,length(T2),2) 
myFile$timeDiff[EndTime] = T2[EndTime] - T2[EndTime-1] 
myFile 
    user    time timeDiff 
1 use1 2011-07-25 13:08  NA 
2 use1 2011-08-06 2:37 11.561806 
3 use2 2011-07-25 13:08  NA 
4 use2 2011-08-04 3:45 9.609028 

注意,所產生的時間差在天。

2

這裏是解決與shiftdata.table

dt <- read.table(text = "user | time 
      use1 |2011-07-25 13:08 
      use1 |2011-08-06 2:37 
      use2 |2011-07-25 13:08", header = T, sep = "|") 
library(data.table) 
dt <- data.table(dt) 
dt[, time := as.POSIXct(time)] 
dt[, time.diff := time - shift(time, type = "lag"), by = user] 
#    user    time  time.diff 
# 1:   use1 2011-07-25 13:08:00  NA secs 
# 2:   use1 2011-08-06 02:37:00 11.56181 secs 
# 3:   use2 2011-07-25 13:08:00  NA secs