試圖獲得加權平均值的幾個類別要使用的(DF $ A,DF $ B,函數(X)weighted.mean(X,DF $ C))這不當然工作。是否有我有一大堆的變通辦法,但它會這麼簡單,如果我可以只使用這種格式的方式通過做到這一點使用()和weighted.mean()加權平均數與功能
df= data.frame(A=c(1,4,56,4,3),B=c('hi','gb','hi','gb','yo'),C=c(5,2,4,1,3))
by(df$A,df$B,function(x) weighted.mean(x,df$C)) #doesn't work
。
爲什麼要呢? 'by'將函數應用於數據集的子集,並且您正試圖傳遞一個權重向量,該向量是原始數據幀的觀察值數量的長度。 – Thomas
爲什麼你必須使用'by'?包plyr(或data.table或dplyr)很容易實現:'library(plyr); ddply(df,。(B),總結,wm = weighted.mean(A,C))' – Roland
另一個選項是'lapply(split(df,df $ B),function(x)weighted.mean(x $ A ,x $ C))'因爲你似乎不介意列表作爲輸出。 –