麻烦使用reshape2 :: cast函数进行大转置

时间:2013-10-18 00:49:14

标签: r memory casting reshape2 melt

我在R中有一个大型数据集(2.8m行x4列),我正在尝试转置。我试图使用reshape2 :: cast函数来进行转置,但它的内存不足。

问题1:有更好的方法进行转置吗?

问题2:我试图将数据集切成碎片,对碎片进行转置,然后重新组装。但是,我在重组步骤中遇到了一个问题,其中cbind要求我事先知道要加入哪些列。这个问题有巧妙的方法吗?

bigtranspose<-function(dataset){
          n<-nrow(dataset) 
          i<-1
          while (i<=n){
              #take 10 rows at a time and do the transpose
              UB <- min(i+10, n)
              small<-dataset[i:UB,]
              smallmelt<-melt(small, id=c("memberID", "merchantID"))
              t<-dcast(smallmelt, memberID~merchantID, na.rm=TRUE)

              #stack the results together
              if ( !exists("finaldataset") ) 
                finaldataset<-t
              else
                finaldataset<-rbind(finaldataset,t)
              i <- i+10+1
          } 
        }

1 个答案:

答案 0 :(得分:0)

您可以使用t功能进行转置

mat <- matrix(1:(3e+06 * 4), ncol = 4)
dim(mat)
## [1] 3000000       4

tmat <- t(mat)
dim(tmat)
## [1]       4 3000000


# And it's fast
system.time(tmat <- t(mat))
##    user  system elapsed 
##    0.05    0.03    0.08