r - 如何在 R 中取消列出由 data.table 组成的 data.table 中的对象和由 data.table 组成的列表(给出的示例)?
问题描述
我正在尝试从 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
解决方案
最终,我认为 usingtidyr::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 问题中有很多关于此的讨论:
推荐阅读
- c# - Azure 函数不允许在函数方法中创建类对象
- java - 片段中未解决的类“@string/appbar_scrolling_view_behavior”导致行为 OnCreate 未触发
- php - 在 Laravel 中使用 Stripe 创建费用,在测试模式下工作,但不是在现场
- php - 无需查询即可获取模型表名
- openedge - 如何在进度 4GL 上将字符转换为十进制?
- wpf - WPF 绑定背景为 SolidColorBrush
- javascript - Dart 中的 Javascript“地图”等价物是什么?
- android - Google Fitness:在没有反馈的情况下处理 TransactionTooLargeException
- ruby-on-rails - 如何在具有活动记录关联的设备中注册用户?
- virtualbox - 如何修复“virtualbox DHCP 服务器尚未为虚拟设备分配 IP 地址”