gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:54:37 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com