7

dlply が で行うことと同じことを達成しようとしていdata.tableます。したがって、非常に単純な例として:

library(plyr)
library(data.table)
dt <- data.table( p = c("A", "B"), q = 1:2 )

dlply( dt, "p", identity )
$A
  p q
1 A 1

$B
  p q
1 B 2

dt[ , identity(.SD), by = p ]
   p q
1: A 1
2: B 2

foo <- function(x) as.list(x)
dt[ , foo(.SD), by = p ]
   p q
1: A 1
2: B 2

明らかに、 の戻り値はfoo1 つに折りたたまれdata.tableます。dlplyそして、それが分割data.tablesを通過data.framesするため、それfoo以上のdata.table操作が非効率になるため、使用したくありませんfoo

4

3 に答える 3

2

G. Grothendieck の答えに関して、私は分割がどれだけうまく機能するかに興味がありました:

dt <- data.table( p = rep( LETTERS[1:25], 1E6), q = 25*1E6, key = "p" )

system.time(
  ll <- split(dt, dt[ ,p ] )
)
  user  system elapsed 
  5.237   1.340   6.563 

system.time(
  ll <- lapply( unique(dt[,p]), function(x) dt[x] )
)
  user  system elapsed 
  1.179   0.363   1.541

より良い答えがなければ、私は固執します

lapply( unique(dt[,p]), function(x) dt[x] )
于 2013-05-22T10:03:03.680 に答える
2

これを試して:

> split(dt, dt[["p"]])
$A
   p q
1: A 1

$B
   p q
1: B 2
于 2013-05-22T09:44:09.767 に答える