带有嵌套数据框的数据框:如何使用data.table :: rbindlist设置id列

问题描述 投票:1回答:1

给定一个从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列。有人能启发我吗?

r data.table
1个回答
1
投票

我们可以使用'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
© www.soinside.com 2019 - 2024. All rights reserved.