gpt4 book ai didi

r - 如何 'unlist' data.table 中的一列

转载 作者:行者123 更新时间:2023-12-03 23:39:28 25 4
gpt4 key购买 nike

在我的表格中,某些单元格是向量而不是单个值,即该列是列表而不是向量:

dt1 <- data.table(
colA= c('A1','A2','A3'),
colB=list('B1',c('B2a','B2b'),'B3'),
colC= c('C1','C2','C3'),
colD= c('D1','D2','D3')
)

dt1
# colA colB colC colD
#1: A1 B1 C1 D1
#2: A2 B2a,B2b C2 D2
#3: A3 B3 C3 D3

我需要将它改造成长格式,不列出该列 colB .到目前为止,我是这样做的:
dt1[,.(colB=unlist(colB)),by=.(colA,colC,colD)]
# colA colC colD colB
#1: A1 C1 D1 B1
#2: A2 C2 D2 B2a
#3: A2 C2 D2 B2b
#4: A3 C3 D3 B3

它完成了这项工作,但我不喜欢我必须在 by= 中明确指出所有其他列名称.有没有更好的方法来做到这一点?
(我确定它已经在其他地方得到了回答,但到目前为止我找不到它)

附言理想情况下,我想在没有任何外部包的情况下进行管理

最佳答案

我认为@Jaap's 是最简单的,但这是另一种咀嚼的选择:

#create ID column
dt1[ , ID := .I]

#unnest colB, keep ID column
dt_unnest = dt1[ , .(ID = rep(ID, lengths(colB)),
colB = unlist(colB))]
#merge
dt_unnest = dt_unnest[dt1[ , !'colB'], on = 'ID']
# ID colB colA colC colD
# 1: 1 B1 A1 C1 D1
# 2: 2 B2a A2 C2 D2
# 3: 2 B2b A2 C2 D2
# 4: 3 B3 A3 C3 D3

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

25 4 0