我想在數據幀的1500個稀疏行上總計大約10000列,如colSparseX
。如果我有輸入:如何摺疊非常大的稀疏數據幀
(我試過OriginalDataframe此:
coldatfra <- aggregate(. ~colID,datfra,sum)
這:
coldatfra <- ddply(datfra, .(colID), numcolwise(sum))
但它不工作!)
colID <- c(rep(seq(1:6),2), rep(seq(1:2),3))
colSparse1 <- c(rep(1,5), rep(0,4), rep(1,2), rep(0,5), rep(1,2))
cPlSpars2 <- c(rep(1,3), rep(0,6), rep(1,2), rep(0,5), rep(1,2))
coMSparse3 <- c(rep(1,6), rep(0,3), rep(1,2), rep(0,5), rep(1,2))
colSpArseN <- c(rep(1,2), rep(0,7), rep(1,2), rep(0,5), rep(1,2))
(datfra <- data.frame(colID, colSparse1, cPlSpars2, coMSparse3, colSpArseN))
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 1 1 1 1
2 1 1 1 1
3 1 1 1 0
4 1 0 1 0
5 1 0 1 0
6 0 0 1 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 1 1 1 1
5 1 1 1 1
6 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 1 1 1 1
2 1 1 1 1
而且想要總結每個ID上的元素(10000列 - 需要一些佔位符,因爲這是非常可變的詞)colSparse
個S IN爲了得到這個:
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 2 2 2 2
2 2 2 2 2
3 1 1 1 0
4 2 1 2 1
5 2 1 2 1
6 0 0 1 0
注:STR與ddply(datfra, .(colID), numcolwise(sum))
治療OriginalDataframe的(OriginalDataframe)
'data.frame': 1500 obs. of 10000 variables:
$ someword : num 0 0 0 0 0 0 0 0 0 0 ...
$ anotherword : num 0 0 0 0 0 0 0 0 0 0 ...
而且在一個較小的版本(終止)我得到:
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 0019 0 0 0 0
NA <NA> NA NA NA NA
NA.1 <NA> NA NA NA NA
NA.2 <NA> NA NA NA NA
NA.3 <NA> NA NA NA NA
我不明白這些錯誤 – rawr
@rawr你好,再次:)謝謝你!我稍微擴展了這個例子,也許你現在得到了錯誤。但是,這個問題可能與'ddply'有關(它可能無法有效地工作)。是否可以避免'ddply'? – alex
我複製了你的所有代碼,它運行良好。清理你的工作區並重新運行它。另外,'plyr'用於數據幀,數據幀不是矩陣。有一些包含處理稀疏矩陣的方法,我認爲是'Matrix'和'SparseM'。我不使用它們,所以我不能指出你相關的功能。 – rawr