2014-01-16 41 views
2

我有一組汽車銷售數據,並將我的數據分爲以下幾組:對子集數據使用tapply

汽車品牌和銷售年。

toyota=subset(car, brand=="Toyota") 
toyota.yr = cut(toyota$date, "year") 
honda=subset(car, brand=="Honda") 
honda.yr = cut(honda$date, "year") 

所以現在我有6羣的汽車品牌,然後我用tapply逐年獲得銷售各品牌的平均值:

tapply(toyota$price, toyota.yr, mean, na.rm=TRUE) 

我想要對所有6個子組執行此操作,無論如何,我可以一次完成此操作,而不是6次輸入tapply功能。

我感謝任何幫助,謝謝!

+3

也許'骨料(價格〜品牌+一年,FUN =平均值,數據=車)',這只是一種猜測,請[讓你的問題重複性(http://stackoverflow.com/q/5963269/1315767 ),你會得到更好的答案 –

+1

你可以簡單的做到這一點'tapply(汽車$價格表(汽車品牌$,$車一年),FUN =平均值,na.rm = TRUE)' –

+0

感謝@ SimonO'Hanlon,我可以問一個後續問題:我怎麼能畫出結果?我使用了最簡單的函數plot(),但它提供了一種3x3矩陣圖。我想將Y軸作爲價格,將X軸作爲年,所以情節上的點是不同顏色的汽車品牌。謝謝 !! – user2978129

回答

6
tt=by(car$price, list(car$brand,car$year),mean,na.rm=T); 
print(tt["1986","Toyota"]) 

Jilber的建議是更好,如果你想讓它以一種直觀的data.frame,而不是一個列表:

aggregate(price ~ brand + year, FUN=mean, data=car, na.rm=T) 

使用西蒙的建議,如果你希望把它放在一個矩陣,並很容易地檢索結果稍後:

tt=tapply(car$price , list(car$brand , car$year) , FUN = mean , na.rm = TRUE) 
print(tt["1986","Toyota"]) 

使用dput(sample_data)給出可重現的代碼。

+0

'tapply'和'by'基本上是一樣的。好答案。 +1。 –

+0

'dplyr'風格:'q4totalnetassets%>%的過濾器(!國家= 「總」)%>%GROUP_BY(貨幣)%>%總結(總和= SUM(值))' –