我很抱歉,如果這已被回答 - 我只是找不到它!爲了簡化,我有一個有兩個相關列的汽車數據框:里程和價格。我想計算0-20,000英里,20,000-40,000等(在20,000英里「分箱」中)的平均價格和數量。我一直在爲各種里程範圍製作數據的子集,然後查看該子集的平均數和車輛數。我想知道是否有更有效的方法來做到這一點,而不是使所有這些子集 - 我用很多「箱」和數據做了很多次。我很想學習一個這樣做的一個更加滑稽的方式。有沒有一種快速的方法來獲得數據框中列的各種「分類」的均值?
謝謝!
我很抱歉,如果這已被回答 - 我只是找不到它!爲了簡化,我有一個有兩個相關列的汽車數據框:里程和價格。我想計算0-20,000英里,20,000-40,000等(在20,000英里「分箱」中)的平均價格和數量。我一直在爲各種里程範圍製作數據的子集,然後查看該子集的平均數和車輛數。我想知道是否有更有效的方法來做到這一點,而不是使所有這些子集 - 我用很多「箱」和數據做了很多次。我很想學習一個這樣做的一個更加滑稽的方式。有沒有一種快速的方法來獲得數據框中列的各種「分類」的均值?
謝謝!
你可能想沿着這些線路水木清華:
library(data.table)
d = data.table(mileage = runif(1000, 0, 100000), price = runif(1000, 15000, 35000))
d[, list(price = mean(price), number = .N),
by = cut(mileage, c(0, 20000, 25000, 30000, 100000))][order(cut)]
# cut price number
# 1: (0,2e+04] 25252.70 215
# 2: (2e+04,2.5e+04] 25497.66 46
# 3: (2.5e+04,3e+04] 25349.79 45
# 4: (3e+04,1e+05] 25037.93 694
'cut'在這裏更有意義! (+1)。 – Arun
謝謝!太棒了!我喜歡擴展自己的R知識,而不是蠻橫的強迫它。我感謝你抽出時間。 – user2012544
爲了使箱, 「腰斬」。例如:
x=1:10
bkpt=c(0,2.5,7.5,10)
x.cut=cut(x,breaks=bkpt)
這樣就完成了。 y是稍後的一些數據:
y=21:30
data.frame(x,x.cut,y)
要計算每個組的東西,請使用tapply。以下我的例子:
tapply(y,x.cut,length)
tapply(y,x.cut,mean)
,其計算的(a)的y的數量和(b)在每個由x.cut定義的基團的的y的平均值。
另一種方法使用聚合:
df <- data.frame(mil = sample(1e5,20),price = sample(1000,20))
#mil2 is our "mile bin" (0 -> [0:20000[; 1 -> [20000:40000[ ...)
df$mil2 = trunc(df$mil /20000)
# then to get the mean by "mile bin":
aggregate(price ~ mil2,df,mean)
# or the number:
aggregate(price ~ mil2,df,length)
# or simply:
table(df$mil2)
這說明如何使用聚合按類別單次運行到返回多於一個統計。
# Using Quentin's data
d[['mileage.cat']] <- cut(d$mileage, breaks=seq(0, 200000, by= 20000))
aggregate(d$price, d['mileage.cat'] ,
FUN=function(price) c(counts=length(price),
mean.price=mean(price)))
mileage.cat x.counts x.mean.price
1 (0,2e+04] 212.00 24859.01
2 (2e+04,4e+04] 194.00 24343.16
3 (4e+04,6e+04] 196.00 24357.73
4 (6e+04,8e+04] 191.00 25006.71
5 (8e+04,1e+05] 207.00 25250.23
如果你同時想要長度和平均數,相比於我的回答,這是一個改進:)。 –
如果你想使用'aggregate.formula',那麼你的函數仍然可以是'function(x)c(mean = mean(x),length = length(x))' –
請您的文章重複性通過在看看[**如何使一個偉大的可重複的例子**](http://stackoverflow.com/questions/5963269/how-to-make-a-偉大的 - 可重現的例子)爲我們提供幫助。謝謝。 – Arun