【问题标题】:Weighted. mean error in R加权。 R中的平均误差
【发布时间】:2018-11-04 12:16:44
【问题描述】:

我创建了以下数据框

 df<-data.frame("A"<-c(1:20), "B"<-c(21:40),"C"<-c(11:30))
 names(df)<-c("A", "B", "C")
 nameslist<-c("A", "B")

我正在尝试获得两列组合的平均值和加权平均值

我试过了

   mean(df[,names(df)[names(df)%in%nameslist]])

我收到以下错误。

Warning message:
In mean.default(df[, names(df)[names(df) %in% nameslist]]) :
  argument is not numeric or logical: returning NA

我也尝试过如下计算加权平均值

 weighted.mean(df[,names(df)[names(df)%in%nameslist]])
 410

在这种情况下,我得到的输出为 410。我无法发现我错在哪里。我请求有人在这里指导我

【问题讨论】:

  • df 中提取列并通过名称向量计算矩阵的平均值:mean(t(df[, nameslist]))
  • df &lt;- data.frame(A=c(1:20), B=c(21:40), C=(11:30)); sapply(df[, c("A", "B")], mean)

标签: r dataframe mean weighted-average


【解决方案1】:

要获得 A 列和 B 列的全局平均值,请尝试以下代码:

mean(unlist(df[,which(colnames(df)%in%nameslist)]))
[1] 20.5

关于weighted.mean你得先定义w

w   
a numerical vector of weights the same length as x giving the weights to use for elements of x.

一个例子:

w<-c(0.5,1)   
weighted.mean(unlist(df[,which(colnames(df)%in%nameslist)]),c(rep(w[1],nrow(df)),rep(w[2],nrow(df))))
        [1] 23.83333

更新: 如果您想根据值大于零的行数得出权重,一个解决方案:

w<-c(mean(df[,1]>0),mean(df[,2]>0))

【讨论】:

  • 谢谢。有没有一种方法可以根据变量的出现频率或值大于零的行数得出权重
  • 根据值更新了 w 的示例。
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多