当我使用ddply计算数字列的平均值时,输出不是我所期望的:
ddply(df, .(df[,1]) summarize, Sales = mean(df[,5]))
输出结果为:
df1[, 4] Sales 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
我不明白为什么平均值是相同的,即使按日期排序。不是每个日期销售额不同的预期产出。它计算整列的平均值。
答案 0 :(得分:2)
第二个参数应为.(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
如果这不能解决您的问题,请提供您的数据样本,以便我们重现您的问题。
答案 1 :(得分:1)
df
是整个数据框的名称; ddply并总结不要改变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))