2

私はのを持っていlistますdata.frames。それぞれdata.frameはそれほど大きくありません〜150,000行。しかし、私のリストにはこれらのdata.frames.

次のdata.frameようになります。

comp <- read.table(text = " G T H S B
                             1 1 1 1 x1
                             1 1 1 2 x2
                             1 2 6 1 x3
                             1 2 6 2 x4
                             2 1 7 1 x1
                             2 2 8 2 x2
                             2 2 8 1 x1
                             2 3 9 2 x2",header=TRUE,stringsAsFactors=FALSE)

リストは次のとおりです。

complist <- list(comp,comp,comp)

data.framefor every , ( ), for each in each in each in eachcompの長さを知りたいです。BSHTG

だから私の小さな練習のために私は使用します:

library(plyr)
listresults <- lapply(complist, function(x) {
                                res <- ddply(x, .(G,T,H,S),
                                function(z) data.frame(resultcol = length(z$B)) )
                                            } )

しかし、私のより大きなリストでは、これは非常に長いです。誰かがより迅速な方法を見つけるのを手伝ってくれませんか? Aggregateはここではオプションではありませsapply(split))ddply。実際のコードでなくても、提案は私にとって同じように役立ちます。

4

3 に答える 3

6

data.tableこれは非常に良い選択肢となる状況です。data.tableは一貫して猛烈な速さを示しており、それ以上にplyr. ここSOには多くの例があります。例を参照してください:

これは利用可能な情報のほんの一部です。 のドキュメントをdata.table参照するか、[r][data.table]SO のタグを参照してください。

于 2013-01-28T14:04:44.593 に答える
6

を使用data.tableすると、これが速くなる場合があります。方法は次のとおりです。

require(data.table)
o <- lapply(1:length(complist), function(i) { 
    dt <- data.table(complist[[i]], key=c("S", "H", "T", "G"))
    dt[, list(resultcol = .N), by=c("S", "H", "T", "G")]
})
于 2013-01-28T14:12:46.817 に答える
2

を使用して1回試してくださいdata.table

lapply(complist, function(df) {
  df <- data.table(df, key=c("G","T","H","S"))
  df[,length(B),by=c("G","T","H","S")]
})

免責事項: を使用するのは初めてdata.tableなので、この回答には注意してください:)

于 2013-01-28T14:12:57.827 に答える