1

我在 R 中有一个大型数据集(2.8m 行 x 4 列),我正在尝试转置。我试图使用 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
          } 
        }
4

1 回答 1

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 
于 2013-10-18T01:03:51.270 回答