Превращение столбца data.table в список в том же data.table - PullRequest
1 голос
/ 01 октября 2019

У меня есть 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
)

В этом 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
)

Как я могу заставить это работать в R?

1 Ответ

5 голосов
/ 01 октября 2019

здесь есть одна опция

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

Здесь мы присвоили новый столбец как столбец 'C' class равно integer, и возникнет проблема, если мы не изменимпервый класс

class(DT$C) <- "list"
DT[,  C := list(list(unlist(C))), iso]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...