2016-02-26 146 views
0

我有一個下面列出的數據框,它有多個日期條目。我想每天計算一個項目的平均收入。輸出需要在數據框中,因爲我想在ggplot中使用它。 無論我做什麼,我都會得到有關日期的數據框的所有行中相同的數據。計算數據集中每個日期的均值; R

dataframe: 
     quantity pricereal tip length name  date  average 
2   2  12.66 Typ-3  2m Typ-3 2m 2015-08-03 8.351814 
3   1   6.87 Typ-3  2m Typ-3 2m 2015-08-03 8.351814 
7   1  10.62 Typ-6  2m Typ-6 2m 2015-08-03 8.351814 
49   1  12.61 Typ-4  2m Typ-4 2m 2015-08-04 8.351814 
50   4  10.62 Typ-6  2m Typ-6 2m 2015-08-04 8.351814 
61   2   9.14 Typ-1  2m Typ-1 2m 2015-08-05 8.351814 
62   3   4.41 Typ-1  2m Typ-1 2m 2015-08-05 8.351814 

我得到的平均數顯然是錯誤的。我寫了下面的語法:

data_alu$average <- NA 
data_alu$average <- mean(data_alu$pricereal) 

我認爲解決的辦法是用tapply但是我得到了一個錯誤信息,因爲有更多的行與一個日期coresponding。

data_alu$average <-tapply(data_alu$date, data_alu$pricereal, mean) 

只是clerify我想每一天的意思..所有的數據

希望有救世主在那裏的不平均...

+1

可以dput數據 – mtoto

+0

退房'AVE()'函數 – MrFlick

回答

0

這裏有一個基礎R解決方案......你幾乎是用它來做的。 by是我找到直覺的tapply的包裝。然後獲取數據幀中的數據併合並它們。

df <- read.table(textConnection('  quantity pricereal tip length name length date  average 
2   2  12.66 Typ-3  2m Typ-3 2m 2015-08-03 8.351814 
3   1   6.87 Typ-3  2m Typ-3 2m 2015-08-03 8.351814 
7   1  10.62 Typ-6  2m Typ-6 2m 2015-08-03 8.351814 
49   1  12.61 Typ-4  2m Typ-4 2m 2015-08-04 8.351814 
50   4  10.62 Typ-6  2m Typ-6 2m 2015-08-04 8.351814 
61   2   9.14 Typ-1  2m Typ-1 2m 2015-08-05 8.351814 
62   3   4.41 Typ-1  2m Typ-1 2m 2015-08-05 8.351814 '), 
       stringsAsFactors=FALSE) 
tmp <- by(df$pricereal, df$date, mean) 
df2 <- data.frame(date=names(tmp), 
        mean=as.numeric(tmp), 
        stringsAsFactors=FALSE) 
df$avg <- df2$mean[match(df$date, df2$date)] 
+2

耶,基地-R!但不是像'dat $ average < - ave(dat $ pricereal,dat $ date)'更容易?使您不必創建兩個額外的數據框。 – Heroka

+1

哇,甚至不知道'ave'存在...它是否正確匹配?如果是這樣,那真棒。 – cory

相關問題