【问题标题】:How to unlist objects in data.table that is made of data.table and lists made of data.table in R (example given)?如何在 R 中取消列出由 data.table 组成的 data.table 中的对象和由 data.table 组成的列表(给出的示例)?
【发布时间】:2021-01-11 00:55:58
【问题描述】:

我正在尝试从 data.table 中取消列出值并将其设为 data.table,如下所述

given_y<-data.table(country=c("abc","xyz"),V2=(list(data.table(city=c("Del","Mum","Kol"),age=c(20,30,45)),data.table(city=c("Del","Mum"),age=c(30,45)))))

str(given_y)


Classes ‘data.table’ and 'data.frame':  2 obs. of  2 variables:
$ country: chr  "abc" "xyz"
$ V2     :List of 2
..$ :Classes ‘data.table’ and 'data.frame': 3 obs. of  2 variables:
.. ..$ city: chr  "Del" "Mum" "Kol"
.. ..$ age : num  20 30 45
.. ..- attr(*, ".internal.selfref")=<externalptr> 
..$ :Classes ‘data.table’ and 'data.frame': 2 obs. of  2 variables:
.. ..$ city: chr  "Del" "Mum"
.. ..$ age : num  30 45
.. ..- attr(*, ".internal.selfref")=<externalptr> 
- attr(*, ".internal.selfref")=<externalptr> 

这就是我想要我的数据的方式

expected_y<-data.table(customer=c("abc","abc","abc","xyz","xyz"),city=c("Del","Mum","Kol","Del","Mum"),age=c(20,30,45,30,45))

expected_y

 customer city age
1:      abc  Del  20
2:      abc  Mum  30
3:      abc  Kol  45
4:      xyz  Del  30
5:      xyz  Mum  45

【问题讨论】:

    标签: r list dplyr data.table


    【解决方案1】:

    最终,我认为使用tidyr::unnest 是目前最好的选择:

    as.data.table(tidyr::unnest(given_y, v2))
    #    country city age
    # 1:     abc  Del  20
    # 2:     abc  Mum  30
    # 3:     abc  Kol  45
    # 4:     xyz  Del  30
    # 5:     xyz  Mum  45
    

    我发现了一些我需要添加keep_empty = TRUE 的数据集,但这里不需要。 (例如,其中一个嵌入的帧有 0 行。)

    这可能会损失一些内部效率,因为(我相信)它正在制作数据的副本(data.table 在可能的情况下非常努力避免......不确定这里是否可以避免)。

    在rdatatable问题中有很多关于这个的讨论:

    【讨论】:

    • 由于我的 data.table 很大,并且当我使用建议的方法时,我收到此错误“无法分配矢量大小”。任何解决方法可以绕过此错误? as.data.table(tidyr::unnest(results4, hr_visitors)) 错误:无法分配大小为 10.9 Mb 的向量
    • 目前没有,抱歉,因为可重现的数据样本非常困难,所以很难询问和回答此类内存问题。我会继续咀嚼它......
    【解决方案2】:

    这是一个使用data.table回答您问题的解决方案

    given_y[, unlist(.SD[[1]], recursive = F), by = country]
    
    #     country city age
    # 1:     abc  Del  20
    # 2:     abc  Mum  30
    # 3:     abc  Kol  45
    # 4:     xyz  Del  30
    # 5:     xyz  Mum  45
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      相关资源
      最近更新 更多