Средневзвешенное значение нескольких столбцов с использованием заданных весов

#r

#r

Вопрос:

Предполагая, что у меня есть:

 weights <- c(0.15, 0.25, 0.11, 0.9, 0.35, 0.05)
  

И следующая таблица данных Phones :

 make     model    price    users    rating    continent    market       years   success
Nokia     3310    800       5000       5       Europe     4000000        30        yes
Huawei    Foto    500      10000       7       Asia       1200000        10       no
Apple     XS      1500     90000       8       NAmerica   4200000         8        yes
Mi        125     300        500       5       Asia        300000         3        yes
  

Я хочу добавить новый столбец с именем Impact , который представляет собой вес, умноженный на столбцы price, users, rating, market, and years

Пока я могу получить среднее значение столбцов, используя:

 Phones$wt <- rowMeans(subset(Phones, select = c(price, users, rating, market, years)), na.rm = TRUE)
  

Итак, я хочу получить средневзвешенное значение в зависимости от весов, которые я выбрал вручную.

Комментарии:

1. Помогает ли это Phones$wt <- apply(dplyr::select(Phones, price, users, rating, market, years), 1, function(x) { mean(x * weights) } ?

2. Также, пожалуйста, поделитесь фреймом данных Phones с dput

Ответ №1:

Средневзвешенное значение такое же, как при умножении матрицы, за исключением того, что вы дополнительно делите результат на сумму весов. У вас есть 6 весов и 5 столбцов, поэтому я удалил последний вес.

 m <- as.matrix(subset(Phones, select = c(price, users, rating, market, years)))

weights <- c(0.15, 0.25, 0.11, 0.9, 0.35)

m %*% weights / sum(weights)

#           [,1]
# [1,] 2046239.2
# [2,]  615101.9
# [3,] 2160641.3
# [4,]  153506.6
  

Используемые данные:

 Phones <- data.table::fread('
make     model    price    users    rating    continent    market       years   success
Nokia     3310    800       5000       5       Europe     4000000        30        yes
Huawei    Foto    500      10000       7       Asia       1200000        10       no
Apple     XS      1500     90000       8       NAmerica   4200000         8        yes
Mi        125     300        500       5       Asia        300000         3        yes
')
  

Ответ №2:

Обратите внимание, что взвешенное среднее значение по набору критериев с разными диапазонами практически бессмысленно. Например, небольшие процентные различия на рынке затмевают большие процентные различия в рейтинге. Вы должны нормализовать вектор каждого столбца, а затем применить веса. Также я предполагаю, что низкая цена лучше, поэтому нормализацию следует выполнять по обратному отношению к этим значениям. Итак, ваша нормализованная матрица будет выглядеть следующим образом:

введите описание изображения здесь