【问题标题】:dataframe with nested dataframes : how to set id column with data.table::rbindlist带有嵌套数据框的数据框:如何使用 data.table::rbindlist 设置 id 列
【发布时间】:2019-10-25 18:29:39
【问题描述】:

给定一个从 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

但我不知道如何在 rbindlist 函数中添加原始 DT 中的 timestamp 列。有没有人可以启发我?

【问题讨论】:

  • 您可以使用idcol

标签: r data.table


【解决方案1】:

我们可以使用“时间戳”设置list 列的名称,并使用来自rbindlistidcol 参数

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

用'timestamp' 命名list 元素可以将'type' 更改为character 类(尽管在这种情况下输入列'timestamp' 是character)。如果我们需要保留类型

rbindlist(Map(cbind, timestamp = DT$timestamp, DT$sensordatavalues))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多