我在調整我寫的函數時掙扎不已,這讓我很頭疼,所以我想我會在這裏發佈它。通過按函數的加權平均值
在函數中我使用R的「by」函數,它將數據框放入子集中並在其上運行函數。
現在我正在擴展函數以包含weighted.mean(來自'descr'包),並且我得到一個錯誤,即x和w的長度不相等。
一些代碼來顯示:
set.seed(100)
d1 <- rnorm(300)
d2 <- (floor(runif(100, min=1, max=4)))
weight <- rnorm(300,mean = 1, sd = 1)
df <- cbind.data.frame(d1,d2,weight)
df$d2 <- factor(df$d2,
levels = c(1,2,3,4),
labels = c("red", "blue", "green","orange"))
require('descr')
by(df$d1, df$d2, function(x) mean(x=x, na.rm=TRUE))
by(df$d1, df$d2, function(x) weighted.mean(x=x,w=df$weight na.rm=TRUE))
所以我使用1個數值1個因子有4個電平的數據幀,雖然只3具有的數據(例如缺失/ fitlered數據)和重可變。
第8條命令就是我現在所擁有的,但現在我需要爲它添加權重。 所以這給了我每種顏色的平均值。也就是說,在我沒有任何數據的情況下,d2的水平會返回NA,這是我需要的。 (因爲我正在處理不同的數據集並需要合併結果,所以定義的所有級別也都會輸出,這一點很重要。)
第9個命令(帶有weighted.mean的命令)返回一個錯誤x/w的長度是不同的。 這是因爲通過創建每件df $ d2的df $ d1的子集,但weighted.mean(x = x,w = weight,...)中的權重是整個變量,而不僅僅是子集。
我一直在試圖看看weighted.mean的代碼,看看我不能重寫它,但還沒有找到解決方案。任何幫助都是值得歡迎的。
的Tx百萬分,完美的作品..不知道那一個,但是從現在起將記住它.. –