2014-06-09 28 views
0

當我計算使用ddply輸出數值列的平均值是不是我所期望:意外的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 

我不明白爲什麼平均值是同樣,儘管它是按日期排序的。考慮到每個銷售日期不同,預期產量不同。它計算整列的平均值。

+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)) 
+0

謝謝,就是這樣!對不起,沒有發佈任何數據 – user3723816

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 

如果這樣不能解決您的問題,請提供您的數據樣本,以便我們能夠重現您的問題。