我玩dplyr了一点,非常喜欢它.我错过了一些东西.在plyr,我能够将函数传递给ddply并重用它.
library('dplyr')
library('plyr')
fn = function(df) {
summarise(df,
count = length(id))
}
ddply(DF1,'group', fn)
ddply(DF2,'group', fn)
Run Code Online (Sandbox Code Playgroud)
因此,我可以将一长串记录应用于多个数据集,而无需复制所有参数summarise.在dplyr,但是,我必须这样做
dplyr::summarise(group_by(DF1,group),
count = length(id))
dplyr::summarise(group_by(DF2,group),
count = length(id))
Run Code Online (Sandbox Code Playgroud)
所以summarise每次都必须重复这些论点.我定义参数列表时会评估带有list('.data'=DF1,'count'=length(id))和do.call不起作用length(id)的参数列表.这有什么解决方案吗?
我喜欢@RomanLustrik的答案,所以这是dplyr他100%的答案.
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
Run Code Online (Sandbox Code Playgroud)
在这个答案中,我只是试图复制Roman的方法,但你可以重用你的函数(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
Run Code Online (Sandbox Code Playgroud)
你甚至可以像这样包装它
do(list(df1, df2), function(df) group_by(df, b) %.% fn())
Run Code Online (Sandbox Code Playgroud)