Взвешенная.средняя ошибка в R - PullRequest
0 голосов
/ 25 мая 2018

Я создал следующий фрейм данных

 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.Я не могу раскрыть, где я не прав.Я прошу кого-то, чтобы вести меня здесь

1 Ответ

0 голосов
/ 25 мая 2018

Чтобы получить глобальное среднее для столбцов 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.

Anпример:

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))

...