在我的表中,一些单元格是向量而不是单个值,即列是列表而不是向量:
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
Run Code Online (Sandbox Code Playgroud)
我需要将其重新整理成一个长格式的列表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
Run Code Online (Sandbox Code Playgroud)
它完成了工作,但我不喜欢我必须明确指出所有其他列名称by=.有没有更好的方法来做到这一点?
(我确定它已经在其他地方得到了解答,但到目前为止我找不到它)
PS理想情况下我想管理没有任何外部包
我想将列名传递给setkey()除了一两个.我可以轻松地像下面这样做:
setkey(df, column1, column2, column3, column6, ..., columnN, physical = TRUE)
Run Code Online (Sandbox Code Playgroud)
(请注意column4并column5跳过).
但是它要求我列出除某些特定列之外的所有列名.我可以获取列的列表colnames(df),但我不知道如何(1)将其传递给setkey()(2)从列表中排除某些列?