减去R

时间:2017-04-01 21:39:28

标签: r excel

我最近开始在R工作,通过excel文件进​​行操作和查询。我有一个名为my_File.csv的excel文件保存到我的桌面。这是我到目前为止所拥有的:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

请注意,产生的时差以天为单位。