Взвешенный. средняя ошибка в R

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

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


person Raghavan vmvs    schedule 25.05.2018    source источник
comment
Извлеките столбцы из df переданного вектора имен и вычислите среднее значение по матрице с помощью: mean(t(df[, nameslist]))   -  person pogibas    schedule 25.05.2018


Ответы (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))

person Terru_theTerror    schedule 25.05.2018
comment
Спасибо. Есть ли способ получить веса на основе частоты появления переменной или количества строк со значениями больше нуля - person Raghavan vmvs; 25.05.2018
comment
Обновлен пример w на основе значений. - person Terru_theTerror; 25.05.2018