我有一个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中使用它?
这是一个选择
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”柱class是integer,它将有一个问题,如果我们不先更改类
class(DT$C) <- "list"
DT[, C := list(list(unlist(C))), iso]
Run Code Online (Sandbox Code Playgroud)