我最近开始在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。我如何计算并将其合并到我的表中?
提前致谢。
答案 0 :(得分:2)
以下是shift
中data.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
请注意,产生的时差以天为单位。