我在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
}
}
答案 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