R 通过将行折叠为新的data.tables来创建嵌套的data.tables

R 通过将行折叠为新的data.tables来创建嵌套的data.tables,r,nested,data.table,R,Nested,Data.table,如何创建包含嵌套data.tables的data.table 例子 set.seed(7908) dt使用y和z作为列创建data.table,然后将其包装在一个列表中,以便可以“填充”到一行中。将其包装在另一个列表中,在该列表中指定生成的列名。使用by=x为x的每个唯一值执行此操作 dt2 <- dt[, list(dt.yz=list(data.table(y, z))), by=x] dt2 ## x dt.yz ## 1: 1 <data.table>

如何创建包含嵌套data.tables的data.table

例子
set.seed(7908)

dt使用y和z作为列创建data.table,然后将其包装在一个列表中,以便可以“填充”到一行中。将其包装在另一个列表中,在该列表中指定生成的列名。使用
by=x
为x的每个唯一值执行此操作

dt2 <- dt[, list(dt.yz=list(data.table(y, z))), by=x]
dt2
##    x        dt.yz
## 1: 1 <data.table>
## 2: 2 <data.table>
## 3: 3 <data.table>
## 4: 4 <data.table>
## 5: 5 <data.table>
要稍后获取data.table的值,请根据所需的x值对meta data.table(dt2)进行子集,然后获取dt.yz列列表中的第一个元素(即嵌套的data.table)

dt2[x==5,dt.yz[[1]]]
##    y  z
## 1: a 28
## 2: b 26
## 3: c 52
## 4: d 55
## 5: e 12

您可以改用
.SD
<代码>dt[,list(dt.yz=list(.SD)),by=x]
Hi@Arun。是的,那会更方便,尤其是如果你有很多专栏的话。它也可能稍微快一点,对吗?对,它会更快(而且更短)
data.table(.)
速度较慢,
as.data.table(.)
速度稍快,但先复制一份<另一方面,code>.SD已准备就绪。是否有机会进行反向处理?@Arun这太好了!此模式是
数据。表
版本的nest和unnest在
tidyverse
中(应进一步升级;已查找了很长时间)@jangorecki相反的op是:
dt[,dt.yz[[1]],by=x]
dt2 <- dt[, list(dt.yz=list(data.table(y, z))), by=x]
dt2
##    x        dt.yz
## 1: 1 <data.table>
## 2: 2 <data.table>
## 3: 3 <data.table>
## 4: 4 <data.table>
## 5: 5 <data.table>
dt2 <- dt[, list(dt.yz=list(.SD)), by=x]
## dt.yz will include all columns not in the `by=`;
## Use `.SDcols=` to select specific columns
dt2[x==5,dt.yz[[1]]]
##    y  z
## 1: a 28
## 2: b 26
## 3: c 52
## 4: d 55
## 5: e 12