将data.table的列转换为同一data.table中的列表

Tom*_*Tom 1 r list data.table

我有一个data.table如下:

library(data.table)  
DT <- fread(
    "A   B  C  D  E  F  iso   year   
     0   A   1   1  NA  NA  NLD   2009   
     1   Y   0   2  NA  NA  NLD   2009   
     0   Q   1   3  NA  NA  AUS   2011   
     1   NA  0   4  NA  NA  AUS   2011   
     0   0   1   7  NA  NA  NLD   2008   
     1   1   1   1  NA  NA  NLD   2008   
     0   1   1   3  NA  NA  AUS   2012   
     0   NA  1   NA  1  NA  ECU   2009   
     1   NA  0   NA  2  0   ECU   2009   
     0   NA  0   NA  3  0   BRA   2011   
     1   NA  0   NA  4  0   BRA   2011   
     0   NA  1   NA  7  NA  ECU   2008   
     1   NA  0   NA  1  0   ECU   2008   
     0   NA  0   NA  3  2   BRA   2012   
     1   NA  0   NA  4  NA  BRA   2012",
   header = TRUE
)
Run Code Online (Sandbox Code Playgroud)

在此data.table中,我想将C每个iso代码的列变成每行的列表。结果是这样的:

library(data.table)  
DT <- fread(
    "A   B   C           D  E  F  iso   year   
     0   A   {1,0,1,1}   1  NA  NA  NLD   2009   
     1   Y   {1,0,1,1}   2  NA  NA  NLD   2009   
     0   Q   {1,0,1}     3  NA  NA  AUS   2011   
     1   NA  {1,0,1}     4  NA  NA  AUS   2011   
     0   0   {1,0,1,1}   7  NA  NA  NLD   2008   
     1   1   {1,0,1,1}   1  NA  NA  NLD   2008   
     0   1   {1,0,1}     3  NA  NA  AUS   2012   
     0   NA  {1,0,1,0}   NA  1  NA  ECU   2009   
     1   NA  {1,0,1,0}   NA  2  0   ECU   2009   
     0   NA  {0,0,0,0}   NA  3  0   BRA   2011   
     1   NA  {0,0,0,0}   NA  4  0   BRA   2011   
     0   NA  {1,0,1,0}   NA  7  NA  ECU   2008   
     1   NA  {1,0,1,0}   NA  1  0   ECU   2008   
     0   NA  {0,0,0,0}   NA  3  2   BRA   2012   
     1   NA  {0,0,0,0}   NA  4  NA  BRA   2012",
   header = TRUE
)
Run Code Online (Sandbox Code Playgroud)

我怎样才能在R中使用它?

akr*_*run 5

这是一个选择

DT[, C1 := list(list(C)), by = iso] 
DT
#    A    B C  D  E  F iso year      C1
# 1: 0    A 1  1 NA NA NLD 2009 1,0,1,1
# 2: 1    Y 0  2 NA NA NLD 2009 1,0,1,1
# 3: 0    Q 1  3 NA NA AUS 2011   1,0,1
# 4: 1 <NA> 0  4 NA NA AUS 2011   1,0,1
# 5: 0    0 1  7 NA NA NLD 2008 1,0,1,1
# 6: 1    1 1  1 NA NA NLD 2008 1,0,1,1
# 7: 0    1 1  3 NA NA AUS 2012   1,0,1
# 8: 0 <NA> 1 NA  1 NA ECU 2009 1,0,1,0
# 9: 1 <NA> 0 NA  2  0 ECU 2009 1,0,1,0
#10: 0 <NA> 0 NA  3  0 BRA 2011 0,0,0,0
#11: 1 <NA> 0 NA  4  0 BRA 2011 0,0,0,0
#12: 0 <NA> 1 NA  7 NA ECU 2008 1,0,1,0
#13: 1 <NA> 0 NA  1  0 ECU 2008 1,0,1,0
#14: 0 <NA> 0 NA  3  2 BRA 2012 0,0,0,0
#15: 1 <NA> 0 NA  4 NA BRA 2012 0,0,0,0
Run Code Online (Sandbox Code Playgroud)

在这里,我们分配到一个新列“C”柱classinteger,它将有一个问题,如果我们不先更改类

class(DT$C) <- "list"
DT[,  C := list(list(unlist(C))), iso]
Run Code Online (Sandbox Code Playgroud)