【发布时间】:2013-12-30 22:02:40
【问题描述】:
我是 data.table“场景”的新手,所以如果我的问题过于简单,我深表歉意。我一直处于必须应用一些分析或子集由唯一 ID 分组的一些数据的位置。通常,每个唯一 ID 大约有 1,000 行,大约有 30 个唯一 ID。因此,我被建议切换到 data.table 而不是试图找出 lapply 或 sapply 或 plyr 包。
这是我的数据类型的示例
structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), dt = structure(c(1138366975,
1138370472, 1138374064, 1138377669, 1138381264, 1138384873, 1138388503,
1138399312, 1138402842, 1138406507, 1138413700, 1138417261, 1138420848,
1138424444, 1138428071, 1138431695, 1138435287, 1138438938, 1138442428,
1138446098), class = c("POSIXct", "POSIXt"), tzone = "GMT")), .Names = c("ID",
"dt"), row.names = c(NA, -20L), class = "data.frame")
我把它转换成data.table
X = data.table(test)
将我的“关键”设置为个人
setkey(X,ID)
那么目标是以 HOURS 为单位计算(目前我希望这很容易)时差。因此,通过 Time2-Time1 来获取每个连续位置之间的小时和分钟(在本例中为 ID)。
X[, diff:=c(NA,diff(dt)),by = ID]
此处的 diff 命令以分钟为单位进行计算,但我想以最有效的方式将其转换/舍入为小时,同时仍将值保留为 POSIX 或时间对象。我知道我可能会创建另一列并将 diff 除以 60。但我希望有某种方法可以键入 "hours" 或 "minutes" 或某处。因为我不了解 data.table 如何处理时间。
我已经尝试在data.frame 中使用for 循环使用difftime 命令来执行此操作,但是它非常麻烦,并且将数据链接回原始数据框让我感到困惑,因为我不精通for 循环。
一旦我将数据分成几个小时,我只想选择相隔 0.5 小时、相隔 4 小时、相隔 12 小时的数据。在 data.table 中我还没有弄清楚该怎么做
【问题讨论】:
标签: r diff data.table