给定一个从JSON数组创建的data.table:
library(jsonlite)
library(data.table)
library(reprex)
DT<- fromJSON("http://data.sensor.community/airrohr/v1/sensor/21523/",flatten=T)
setDT(DT)
str(DT[,.(timestamp,sensordatavalues),])
#> Classes 'data.table' and 'data.frame': 2 obs. of 2 variables:
#> $ timestamp : chr "2019-10-25 18:21:00" "2019-10-25 18:18:33"
#> $ sensordatavalues:List of 2
#> ..$ :'data.frame': 2 obs. of 3 variables:
#> .. ..$ id : num 1.12e+10 1.12e+10
#> .. ..$ value_type: chr "P1" "P2"
#> .. ..$ value : chr "10.78" "5.90"
#> ..$ :'data.frame': 2 obs. of 3 variables:
#> .. ..$ id : num 1.12e+10 1.12e+10
#> .. ..$ value_type: chr "P1" "P2"
#> .. ..$ value : chr "7.10" "5.33"
#> - attr(*, ".internal.selfref")=<externalptr>
我设法取消包含data.frame列表的列:
DTdata <-rbindlist(DT$sensordatavalues,use.names=TRUE)
DTdata
#> id value_type value
#> 1: 11232984769 P1 10.78
#> 2: 11232984770 P2 5.90
#> 3: 11232945708 P1 7.10
#> 4: 11232945709 P2 5.33
但是我被困在timestamp
函数中如何从原始DT
添加rbindlist
列。有人能启发我吗?
我们可以使用'timestamp'设置list
列的名称,并使用idcol
中的rbindlist
自变量
DT[, rbindlist(setNames(sensordatavalues, timestamp), idcol = 'timestamp')]
# timestamp id value_type value
#1: 2019-10-25 18:28:25 11233103168 P1 7.95
#2: 2019-10-25 18:28:25 11233103169 P2 4.95
#3: 2019-10-25 18:25:58 11233063825 P1 9.55
#4: 2019-10-25 18:25:58 11233063829 P2 5.62