这很可能是其中任何一个或两个的重复,如果有这样的道歉,我想这会使它成为一个突出的燃烧问题。
pass grouped dataframe to own function in dplyr
使用plyr可以运行这样的东西:
ddply(mtcars, .(cyl), function(x) table(x$am))
并获得不错的输出
> ddply(mtcars, .(cyl), function(x) table(x$am))
cyl 0 1
1 4 3 8
2 6 4 3
3 8 12 2
我仍然不明白为什么ddply(mtcars, .(cyl), table(am))
无法正常工作,但从未明白过。
有没有办法在dplyr中实现上述目标?
mtcars %>%
group_by(cyl) %>%
function(x) table(x$am)
没有达到相同的效果。
更新的问题(出于历史目的而保留上述内容)。
事后看来,虽然以上是我不时想做的事情,但我更想尝试这样的功能:
blah <- function(x) {
x$position <- 1:nrow(x)
x$count <- nrow(x)
return(x)
}
ddply(mtcars, .(cyl,am), function(x) blah(x))
答案 0 :(得分:3)
将我和docendo的评论转化为答案,这就是do()
的用途。
mtcars %>% group_by(cyl, am) %>% do(blah(.))
# same results as
plyr::ddply(mtcars, plyr::.(cyl, am), function(x) blah(x))
# same as plyr with no anonymous function in this case
plyr::ddply(mtcars, plyr::.(cyl, am), blah)
由于blah
占用了您的完整数据框(至少在列方面)并返回数据框,因此您不需要匿名函数调用。
dplyr
和ddply
之间有很多相似之处,如果要添加列,则使用mutate
,如果要使用聚合函数折叠分组变量,则使用{{ 1}}。 summarise
是dplyr等价于为每个数据做一些其他事情,但它需要返回一个数据框。