首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中有data.table的多列非嵌套

R中有data.table的多列非嵌套
EN

Stack Overflow用户
提问于 2022-05-25 18:02:30
回答 1查看 38关注 0票数 2

我正试图为具有多个嵌套列的data.table找到等效的data.table:

代码语言:javascript
复制
MT <- as.data.table(mtcars)

MT_NEST_MULT <- MT[, .(data1 = .(.SD[, .(mpg, hp)]), data2 = .(.SD[, !c("mpg", "hp")])), by = .(cyl, gear)]
代码语言:javascript
复制
cyl gear data1              data2
8   3    <S3: data.table>   <S3: data.table>    
8   5    <S3: data.table>   <S3: data.table>    
6   4    <S3: data.table>   <S3: data.table>    
6   3    <S3: data.table>   <S3: data.table>    
6   5    <S3: data.table>   <S3: data.table>    
4   4    <S3: data.table>   <S3: data.table>    
4   3    <S3: data.table>   <S3: data.table>    
4   5    <S3: data.table>   <S3: data.table>    

不嵌套单个列很容易:MT_NEST_MULT[, rbindlist(data1), by = .(cyl, gear)]

但我不知道如何两者兼得,也就是做相当于tidyr::unnest(..., c(data1, data2))的事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-25 18:15:24

这里有一个选项--我们指定列来应用rbindlist.SDcols,在.SD (Data.table的子集)上循环,应用rbindlist,用c平平输出

代码语言:javascript
复制
library(data.table)
MT_NEST_MULT[, do.call(c, unname(lapply(.SD, rbindlist))), 
      .SDcols = patterns('data'), by = .(cyl, gear)]

-output

代码语言:javascript
复制
    cyl  gear   mpg    hp  disp  drat    wt  qsec    vs    am  carb
    <num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
 1:     6     4  21.0   110 160.0  3.90 2.620 16.46     0     1     4
 2:     6     4  21.0   110 160.0  3.90 2.875 17.02     0     1     4
 3:     6     4  19.2   123 167.6  3.92 3.440 18.30     1     0     4
 4:     6     4  17.8   123 167.6  3.92 3.440 18.90     1     0     4
 5:     4     4  22.8    93 108.0  3.85 2.320 18.61     1     1     1
 6:     4     4  24.4    62 146.7  3.69 3.190 20.00     1     0     2
 7:     4     4  22.8    95 140.8  3.92 3.150 22.90     1     0     2
 8:     4     4  32.4    66  78.7  4.08 2.200 19.47     1     1     1
 9:     4     4  30.4    52  75.7  4.93 1.615 18.52     1     1     2
10:     4     4  33.9    65  71.1  4.22 1.835 19.90     1     1     1
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72382310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档