r - 如何操作data.table中的data.frame

标签 r dataframe data.table

我有 data.table,其中一些观察列包含 data.frame。例如:

data.table(colA=   c('A1','A2','A3'), 
                  colB=list(data.frame(), 
                            data.frame(colsubB1=c('B2a','B2b'),colsubB2=c('B2c', 'B2d')), 
                            data.frame(colsubB1=c('A3a','A3b'),colsubB2=c('A3c', 'A3d'))),
                  colC=   c('C1','C2','C3'), 
                  colD=   c('D1','D2','D3')
                  )

返回,

   colA         colB colC colD
1:   A1 <data.frame>   C1   D1
2:   A2 <data.frame>   C2   D2
3:   A3 <data.frame>   C3   D3

我希望得到以下结果:

    colA colsubB1 colsubB2 colC colD
1:   A1     <NA>     <NA>   C1   D1
2:   A2      B2a      B2c   C2   D2
3:   A2      B2b      B2d   C2   D2
4:   A3      A3a      A3c   C3   D3
5:   A3      A3b      A3d   C3   D3

你能给点建议吗?

最佳答案

使用 by:

DT[, if(nrow(colB[[1L]]) > 0) 
        colB[[1L]] 
    else 
        data.frame(colsubB1=NA_character_, colsubB2=NA_character_), 
    by=setdiff(names(DT), "colB")]

输出:

   colA colC colD colsubB1 colsubB2
1:   A1   C1   D1     <NA>     <NA>
2:   A2   C2   D2      B2a      B2c
3:   A2   C2   D2      B2b      B2d
4:   A3   C3   D3      A3a      A3c
5:   A3   C3   D3      A3b      A3d

数据:

library(data.table)
DT <- data.table(colA=   c('A1','A2','A3'), 
    colB=list(data.frame(), 
        data.frame(colsubB1=c('B2a','B2b'),colsubB2=c('B2c', 'B2d')), 
        data.frame(colsubB1=c('A3a','A3b'),colsubB2=c('A3c', 'A3d'))),
    colC=   c('C1','C2','C3'), 
    colD=   c('D1','D2','D3')

关于r - 如何操作data.table中的data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981960/

相关文章:

python - 有没有办法保留具有特定条件的行,并在不满足此条件的情况下删除其他行?

arrays - 如何使用循环生成的数组作为数据帧中的列来创建数据帧

r - 根据 id 向量中的匹配进行过滤

r - 如果在 2 行中满足某些条件,如何在 R 数据框中添加新列以显示当前行和前一行中值的总和?

r - 在 R 中聚合时间序列

R dplyr在分组后在两行之间划分

r - data.table 相当于 tidyr::complete with group_by with on and by 语法

r - 当其中一些特征是因子时,如何预处理特征?

r - 根据另一个数据框的值创建新的数据框

r - 为什么rbindlist是 "better"而不是rbind?