在data.table的列中返回向量

时间:2018-10-22 13:25:49

标签: r data.table

我在R中有一个data.table,我正在寻找基于.SDcols逐行创建向量的方法。

library("data.table")
dt = data.table(
                id=1:6,
                A1=sample(100,6),
                A2=sample(100,6),
                A3=sample(100,6),
                B1=sample(100,6),
                B2=sample(100,6),
                B3=sample(100,6)
               )
dt[,x1:=paste(.SD,collapse = ","),.SDcols=A1:B3,by=id]
dt[,x2:=strsplit(x1,",")] # x2 vector of characters

现在,我得到的x2带有一个字符向量。

但是,我期望x2具有整数向量。

R > dt
   id A1 A2 A3 B1 B2  B3                 x2
1:  1 72 23 76 10 35  14  c(72,23,76,10,35,14)
2:  2 44 28 77 29 20  63  c(44,28,77,29,20,63)
3:  3 18 34 43 77 76 100  c(18,34,43,77,76,100)
4:  4 15 33 50 87 86  86  c(15,33,50,87,86,86)
5:  5 71 71 41 75  8   3  c(71,71,41,75,8,3)
6:  6 11 89 98 42 72  27  c(11,89,98,42,72,27)

我尝试了几种解决方案,但都失败了。

dt[,x2:=.(list(.SD)),.SDcols=A1:B3,by=id] #x2 is <data.table>

dt[,x2:=.(lapply(.SD,c)),.SDcols=A1:B3,by=id]
dt[,x2:=.(c(.SD)), .SDcols=A1:B3,by=id]   #RHS 1 is length 6 (greater than the size (1) of group 1). The last 5 element(s) will be discarded.

dt[,x2:=c(.SD),.SDcols=A1:B3,by=id]        # x2 equals A1
dt[,x2:=lapply(.SD,c),.SDcols=A1:B3,by=id] # x2 equals A1
dt[,x2:=sapply(.SD,c),.SDcols=A1:B3,by=id] # x2 equals A1

有什么建议吗?

预先感谢

================================================ =====================

编辑:谢谢Jaap,

 dt[, x2 := lapply(strsplit(x1, ","), as.integer)] # it works  

还是,我想知道有什么漂亮的解决方案吗?

================================================ =====================

edit2:

新的解决方案,基本功能比我想象的要有用。

 dt[,ABC0:=apply(rbind(.SD), 1, list),.SDcols=A1:B3,by=id]
 dt[,ABC1:=apply(cbind(.SD), 1, list),.SDcols=A1:B3,by=id]

或更简单

 dt[,ABC2:=lapply(.SD,rbind),.SDcols=A1:B3] 

0 个答案:

没有答案