R 计算时间差,按行分组的数据
我有以下格式的数据集R 计算时间差,按行分组的数据,r,zoo,reshape2,R,Zoo,Reshape2,我有以下格式的数据集 ID DATETIME VALUE 1 4/2/2012 10:00 300 1 5/2/2012 23:00 150 1 6/3/2012 10:00 650 2 1/2/2012 10:00 450 2 2/2/2012 13:00 240 3 6/5/2012 09:00 340 3 7/5/2012 23:00 240
ID DATETIME VALUE
1 4/2/2012 10:00 300
1 5/2/2012 23:00 150
1 6/3/2012 10:00 650
2 1/2/2012 10:00 450
2 2/2/2012 13:00 240
3 6/5/2012 09:00 340
3 7/5/2012 23:00 240
我想首先计算从每个ID的第一个实例到每个后续时间的时间差
ID DATETIME VALUE DIFTIME(days)
1 4/2/2012 10:00 300 0
1 5/2/2012 23:00 150 1.3
1 6/3/2012 10:00 650 33
2 1/2/2012 10:00 450 0
2 2/2/2012 13:00 240 1
3 6/5/2012 09:00 340 0
3 7/5/2012 23:00 240 1
然后我想把它做成一个宽幅的格式
ID 0 1 1.3 33
1 300 na 150 na 650
2 450 240 na na
3 340 240 na na
这里是一个使用
data.table
和reformae2
包的解决方案:
library(data.table)
DT <- as.data.table(dat)
DT[, `:=`(DIFTIME, c(0, diff(as.Date(DATETIME)))), by = "ID"]
## ID VALUE DATETIME DIFTIME
## 1: 1 300 2012-02-04 10:00:00 0
## 2: 1 150 2012-02-05 23:00:00 1
## 3: 1 650 2012-03-06 10:00:00 30
## 4: 2 450 2012-02-01 10:00:00 0
## 5: 2 240 2012-02-02 13:00:00 1
## 6: 3 340 2012-05-06 09:00:00 0
## 7: 3 240 2012-05-07 23:00:00 1
library(reshape2)
dcast(formula = ID ~ DIFTIME, data = DT[, list(ID, DIFTIME, VALUE)])
## ID 0 1 30
## 1 1 300 150 650
## 2 2 450 240 NA
## 3 3 340 240 NA
(我不投票)我猜你被否决了,因为1-你没有以其他人可以使用的简单格式提供你的数据,你也没有表现出任何解决问题的努力。谢谢你让我知道-我会尝试改进数据格式,你可以使用
dput(head(dat))
,而你得到的结构与我的类似(见我的答案)无法复制这个答案-我想是因为我在VALUE列中有非唯一的值-我的示例数据结构(list(ID=c(1L,1L,2L,2L,3L,3L),DATETIME=structure(c(1334187600,1334614800,1371419340,137168082013335797401334528400),class=c(“POSIXct”,“POSIXt”),tzone=“”),VALUE=c(600L,3600L,850L,5050L,2850L,2850L)),.Names=c(“ID”,“DATETIME”,“VALUE”),row.Names=c(NA,6L),class=“data.frame”)非常感谢您的帮助-如果所有值都是唯一的,则agstudy的上述解决方案有效-我收到dcast错误“聚合函数缺失:默认为长度”,并丢失值的值
structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 3L, 3L), DATETIME = structure(c(1328346000,
1328479200, 1331024400, 1328086800, 1328184000, 1336287600, 1336424400
), class = c("POSIXct", "POSIXt"), tzone = ""), VALUE = c(300L,
150L, 650L, 450L, 240L, 340L, 240L)), .Names = c("ID", "DATETIME",
"VALUE"), class = "data.frame", row.names = c(NA, 7L))