4

dplyr私は少し遊んで、本当に気に入っています。私は何かが欠けています。ではplyr、関数を に渡してddply再利用することができました。

library('dplyr')
library('plyr')

fn = function(df) {
    summarise(df,
        count = length(id))
}

ddply(DF1,'group', fn)
ddply(DF2,'group', fn)

したがって、すべての引数を に複製することなく、記録の長いリストを複数のデータセットに適用できますsummarise。しかしdplyr、私はこれをしなければなりません

dplyr::summarise(group_by(DF1,group),
    count = length(id))
dplyr::summarise(group_by(DF2,group),
    count = length(id))

したがって、引数をsummarise毎回繰り返さなければなりません。引数リストを定義するときに が評価されるため、 と を使用した引数のリストも機能list('.data'=DF1,'count'=length(id))do.callません。length(id)これに対する解決策はありますか?

4

2 に答える 2

8

I like @RomanLustrik answer, so here's a 100% dplyr approach to his answer.

do(mylist, function(df)
   df %.%
   group_by(b) %.%
   summarise(count = n()))

## [[1]]
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

## [[2]]
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

In this answer I just tried to replicate Roman's approach but you can reuse your function (fn) :

fn <- function(df) {
    summarise(df,
        count = n())
}

group_by(df1, b) %.% fn()
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

group_by(df2, b) %.% fn()
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

And you can even wrap it like this

do(list(df1, df2), function(df) group_by(df, b) %.% fn())
于 2014-01-20T06:15:32.753 に答える
3

これはあなたが求めているものですか?

df1 <- df2 <- data.frame(a = runif(10), b = rep(c("a", "b"), each = 5))

library(dplyr)

mylist <- list(df1, df2)
lapply(mylist, FUN = function(x) {
  dplyr::summarise(group_by(x, b),
                   count = length(b))
})
[[1]]
Source: local data frame [2 x 2]

  b count
1 a     5
2 b     5

[[2]]
Source: local data frame [2 x 2]

  b count
1 a     5
2 b     5
于 2014-01-19T14:34:28.777 に答える