Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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
data.table group by函数返回多行或列表_R_Data.table_Tidyverse - Fatal编程技术网

data.table group by函数返回多行或列表

data.table group by函数返回多行或列表,r,data.table,tidyverse,R,Data.table,Tidyverse,这是我的数据表 res = structure(list(ID = c("0c980", "0c980", "0c980", "91320", "f3750", "1b970", "1b970", "1b970", "1b970"), datetime = structure

这是我的数据表

res = structure(list(ID = c("0c980", "0c980", "0c980", "91320", "f3750", "1b970", "1b970", "1b970", "1b970"), 
                     datetime = structure(c(1547128003, 1549873907, 1550057899, 1544261100, 1550409081, 1547295708, 1561875112, 1562846678, 1564143917), class = c("POSIXct", "POSIXt"), tzone = "")), 
                row.names = c(NA, -9L), 
                class = c("data.table", "data.frame"))
数据是

      ID            datetime
1: 0c980 2019-01-10 21:46:43
2: 0c980 2019-02-11 16:31:47
3: 0c980 2019-02-13 19:38:19
4: 91320 2018-12-08 17:25:00
5: f3750 2019-02-17 21:11:21
6: 1b970 2019-01-12 20:21:48
7: 1b970 2019-06-30 14:11:52
8: 1b970 2019-07-11 20:04:38
9: 1b970 2019-07-26 20:25:17
我想根据同一ID内相邻记录之间的时间间隔对每条记录进行编号

我创造了这样的功能,

myFun = function(x,interval=7){
  if(length(x)==1){
    d = 1
  }else{
    a = difftime(x[-1],x[-length(x)],units = 'days')
    b = which(a>=interval)
    c = diff(c(0,b,length(x)))
    d = rep(x = seq(length(b)+1),time = c)
  }
  return(list(d))
}
输出是

> res[,.(myFun(datetime)),by=.(ID)]
      ID      V1
1: 0c980   1,2,2
2: 91320       1
3: f3750       1
4: 1b970 1,2,3,4
我想要的输出是

      ID            datetime V1
1: 0c980 2019-01-10 21:46:43 1
2: 0c980 2019-02-11 16:31:47 2
3: 0c980 2019-02-13 19:38:19 2
4: 91320 2018-12-08 17:25:00 1
5: f3750 2019-02-17 21:11:21 1
6: 1b970 2019-01-12 20:21:48 1
7: 1b970 2019-06-30 14:11:52 2
8: 1b970 2019-07-11 20:04:38 3
9: 1b970 2019-07-26 20:25:17 4
data.table能否按组计算并返回多行

如果data.table不能,还有什么其他方法可以解决我的问题?提迪弗斯


多谢各位

列表列具有不同的
,即整数和数字。如果我们转换到同一个类,然后
取消列表
,并赋值(
:=
),它可以在原始数据中创建一个新列

res[, V1 := unlist(lapply(myFun(datetime), as.numeric)),by=.(ID)]