如何使用data.table转换数据表

时间:2019-07-05 20:45:12

标签: r group-by data.table aggregate

我想转换以下数据表

da<-data.table(Gr=c("A","B","B","B","A","B"),
   mmoSze=c("SCRSCR","SCRSCR","OSNOSN","Eig.SCRSCR","Eig.SCRSCR","Eig.OSNOSN"),
              SCR=c(25, 43, 61, 79, 97, 115))

进入:

da.goal<-data.table(GR=c(   "A",    "B"),
SCRSCR=c(   25, 43),
OSNOSN=c(   0,  61),
Eig.SCRSCR=c(   97, 79),
Eig.OSNOSN=c(   0,  115))

使用data.table! 一种可能的不希望有的方法是分割表,然后合并它们。优雅的方法是什么?

2 个答案:

答案 0 :(得分:2)

dcast()是一个data.table函数,我认为这已经足够优雅了:

dcast(da, Gr ~ mmoSze)

唯一的问题是您得到NA而不是0,但是您可以这样做:

res = dcast(da, Gr ~ mmoSze)
res[is.na(res)] <- 0

答案 1 :(得分:1)

您需要将长表转换为宽表:

dcast(da, Gr ~ mmoSze, fill = 0)

fill = 0将在找不到值的位置加一个零。