【问题标题】:Turning a column of a data.table into a list in the same data.table将 data.table 的列转换为同一 data.table 中的列表
【发布时间】:2019-10-01 16:25:11
【问题描述】:

我有一个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 中,我想根据 iso 代码将列 C 转换为每一行的列表。结果是这样的:

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 中工作?

【问题讨论】:

    标签: r list data.table


    【解决方案1】:

    这是一种选择

    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”列classinteger,如果我们不先更改类就会有问题

    class(DT$C) <- "list"
    DT[,  C := list(list(unlist(C))), iso]
    

    【讨论】:

      猜你喜欢
      • 2012-11-17
      • 2012-08-16
      • 2016-03-13
      • 2020-05-24
      • 1970-01-01
      • 2017-04-21
      • 2011-12-10
      • 1970-01-01
      相关资源
      最近更新 更多