【发布时间】:2013-11-30 16:38:31
【问题描述】:
我有一个名为“allg2”的 32x43 data.frame,为了简单起见,我在这里将其中的一小部分重新创建为 5x5:
gneiss mylonite syenite sedimentary Catg
0 3 4 0 -105.7
2 90 1 0 -99.7
15 51 0 0 -95.25
6 0 0 0 -90.5
0 3 9 0 -85.45
根据要求,示例计算:“片麻岩”列将是 wm=(0/21*-105.7)+(2/21*-99.7)+(15/21*-95.25)+(6/21 *-90.5)+(0/21*-85.45)
我想要每列的加权平均值(在 Catg 中使用感兴趣的值,每列作为该列的权重),但我能找到的每个解决方案都依赖于所有列名中的编码.没有这样的清单可以做到这一点吗?注意:我刚刚意识到我一直在翻转权重和值来称重。我的尝试:
wm=allg2[,lapply(.SD,weighted.mean,w=Catg),by=list(allg2[1,])]
Error: unused argument (by = list(allg2[1, ]))
我从this thread 中发现了这个想法,并尝试将其适应我的情况。是不是因为它们不是真正的行而没有选择列名?我真的不知道这是在做什么,我尝试删除 by= 部分,这给出了错误
Error in lapply(.SD, weighted.mean, w = Catg) : object '.SD' not found
另一个尝试是基于this thread。 “Catg”在第 43 列,所以我尝试这样组织该行:
wm=apply(allg2, 2, function(x) weighted.mean(x[,43], x[,1:42]))
Error in x[, 43] : incorrect number of dimensions
我真的不明白这个错误,因为我的权重列应该在 [,43] 中。
我也试过了:
mallg=data.matrix(allg2)
wm=colWeightedMeans(mallg,allg2$Catg)
Error in colWeightedMeans.matrix(mallg, allg2$Catg) : Argument 'w' has negative weights.
我真的很茫然。我是在犯一些小错误,还是以完全错误的方式解决这个问题?
【问题讨论】:
-
您已经编辑了问题,这太令人困惑了。您能否手动做一个加权平均值,以便我们了解您的问题?
-
很高兴,如有任何混淆,我们深表歉意。 '片麻岩' 列将是 wm=(0/21*-105.7)+(2/21*-99.7)+(15/21*-95.25)+(6/21*-90.5)+(0/21* -85.45)
-
您应该意识到数据框与
data.table对象不同。您在第一次错误尝试中在数据帧上使用data.table代码,这不是成功的方法。 -
如果21是Catg中元素的总和,那么我的答案仍然有效。
-
@juliohm, 21 是“片麻岩”中元素的总和。
标签: r weighted-average