Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算时间差,按行分组的数据_R_Zoo_Reshape2 - Fatal编程技术网

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))