【问题标题】:unexpected ddply() output. Not grouping意外的 ddply() 输出。不分组
【发布时间】:2014-06-09 22:18:57
【问题描述】:

当我使用 ddply 计算数值列的平均值时,输出不是我所期望的:

ddply(df, .(df[,1]) summarize, Sales = mean(df[,5]))

输出是:

df1[, 4] 销售额 1 X01.01.2012 49761.36 2 X01.02.2012 49761.36 3 X01.03.2012 49761.36 4 X01.04.2012 49761.36 5 X01.05.2012 49761.36 6 X01.06.2012 49761.36

我不明白为什么平均值是相同的,即使它是按日期排序的。鉴于每个日期的销售额都不同,这不是预期的输出。它计算整列的平均值。

【问题讨论】:

  • 你的数据呢?

标签: r plyr


【解决方案1】:

第二个参数应该是.(variable name)df[,1] 指的是列中的值,而不是变量的名称。使用mean()时也是如此

这是一个虚假数据的简短示例,因为您没有提供任何数据。

> df <- data.frame(val1 = 1:5, val2 = 6:10)
> library(plyr)
## correct mean
> ddply(df, .(val1, val2), summarize, mean = mean(c(val1, val2)))
  val1 val2 mean
1    1    6  3.5
2    2    7  4.5
3    3    8  5.5
4    4    9  6.5
5    5   10  7.5
## incorrect mean
> ddply(df, .(df[,1], df[,2]), summarize, mean = mean(c(df[,1], df[,2])))
  df[, 1] df[, 2] mean
1       1       6  5.5
2       2       7  5.5
3       3       8  5.5
4       4       9  5.5
5       5      10  5.5

如果这不能解决您的问题,请提供您的数据样本,以便我们重现您的问题。

【讨论】:

    【解决方案2】:

    df 是整个数据框的名称; ddply 和 summarise 不会改变df 的含义。 summarize 设计用于命名列,您的列有名称吗?如果是这样,请使用那些,看起来像

    ddply(df, .(date), summarize, Sales=mean(sales))
    

    按位置处理列的一种方法是代替summarize,指定一个对块进行操作的函数:

    ddply(df, .(df[,1]), function(chunk) data.frame(Sales=mean(chunk[,5])))
    

    但我宁愿推荐给您的数据列名称:

    colnames(df)[c(1,5)] <- c("date", "sales")
    ddply(df, .(date), summarize, Sales=mean(sales))
    

    【讨论】:

    • 谢谢,就是这样!很抱歉没有发布任何数据
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多