我想开始使用dplyr代替ddply,但我无法理解它是如何工作的(我已经阅读了文档).

例如,为什么当我试图改变()时,"group_by"函数不能正常工作?

看看mtcars:

图书馆(汽车)

比如我做一个数据.框架是mtcars的汇总,按"cyl"和"齿轮"分组:

df1 <- mtcars %.%
            group_by(cyl, gear) %.%
            summarise(
                newvar = sum(wt)
            )

然后我想进一步总结一下这个数据框架.对于ddply,这很简单,但当我try 使用dplyr时,它实际上并不是"分组依据":

df2 <- df1 %.%
            group_by(cyl) %.%
            mutate(
                newvar2 = newvar + 5
            )

仍然会生成未分组的输出:

  cyl gear newvar newvar2
1   6    3  6.675  11.675
2   4    4 19.025  24.025
3   6    4 12.375  17.375
4   6    5  2.770   7.770
5   4    3  2.465   7.465
6   8    3 49.249  54.249
7   4    5  3.653   8.653
8   8    5  6.740  11.740

我的语法有问题吗?


编辑:

如果我对plyr和ddply这样做:

df1 <- ddply(mtcars, .(cyl, gear), summarise, newvar = sum(wt))

然后获得第二个df:

df2 <- ddply(df1, .(cyl), summarise, newvar2 = sum(newvar) + 5)

但同样的方法,summary()函数中的sum(newvar)+5不适用于dplyr...

推荐答案

把迪科亚的答案再向前推进一步——正如哈德利所说,"总结一层分组的剥皮情况".它从应用分组的相反顺序剥离分组,这样您就可以使用它了

mtcars %>%
 group_by(cyl, gear) %>%
 summarise(newvar = sum(wt)) %>%
 summarise(newvar2 = sum(newvar) + 5)

请注意,如果在第二行中使用group_by(gear, cyl),这将给出不同的答案.

为了让你的第一次try 成功:

df1 <- mtcars %>%
 group_by(cyl, gear) %>%
 summarise(newvar = sum(wt))

df2 <- df1 %>%
 group_by(cyl) %>%
 summarise(newvar2 = sum(newvar)+5)

R相关问答推荐

R:如何在没有for循环的情况下替换多边形几何中的值?

修改dDeliverr中列表列的最后一个元素

通过R访问MoveApps API

强制相关图以显示相关矩阵图中的尾随零

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

从多个前置日期中获取最长日期

基于现有类创建类的打印方法(即,打印tibles更长时间)

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

使用gcuminc,如何使用逗号格式化风险表?

自动变更列表

使用外部文件分配变量名及其值

R—将各种CSV数字列转换为日期

如何将R中数据帧中的任何Nas替换为最后4个值

打印XTS对象

SHINY:使用JS函数应用的CSS样式显示HTML表格

在列表中排列R数据框中的列顺序

随机森林的带Shap值的蜂群图

如何在R中使用hmm TMB提前一步预测观察到的状态?

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?