Простой расчет индекса на основе среднего значения столбца в R - PullRequest
3 голосов
/ 09 февраля 2020

У меня есть датафрейм с примерно 10 столбцами. Все они имеют тип нумерация c и указывают на другую географическую область c. Некоторые являются относительными значениями, такими как процент жителей с определенной степенью, другие являются общими значениями, такими как общая численность населения. Это выглядит примерно так:

median_age bachelor_rate  emp_rate                       
1       35.2    0.05223252 0.6185185 
2       22.5    0.40045249 0.7744094 
3       36.3    0.26750261 0.8210526 
4       36.8    0.07753825 0.5801861 
5       29.9    0.04805492 0.3593074 
6       26.8    0.00000000 0.4762367 
> 

Я хотел вычислить «индекс» для каждого столбца. Я подумал, что возьму среднее значение для каждого столбца, а затем вычислю разницу со средним для каждого значения ячейки Например, для первой ячейки median_age-column:

mean_age = mean(df$mean_age)
median_age_1 = df$median_age[1]
index = median_age_1/mean_age

Помимо всех математических вопросов и вопросов, связанных с индексами. Как я могу написать функцию, которая делает это для всех столбцов и всех ячеек?

1 Ответ

4 голосов
/ 09 февраля 2020

Если вы решите использовать R, я думаю, что следующий способ - это go. Функция mutate_all () выполняет l oop через все столбцы и выполняет точно такую ​​же работу. Итак, вы хотите думать, что . становится именем каждого столбца, пока R просматривает данные. Для каждого столбца вы можете найти среднее значение с mean(). Поскольку вы хотите разделить каждое значение в каждом столбце на его среднее значение, вы можете express представить эту идею как ~./mean(.). Так как я добавил имя к этой функции. R создал три новых столбца. Если вы хотите перезаписать исходные столбцы, вы можете сделать следующее: mutate_all(mydf, .funs = list(~./mean(.))).

library(dplyr)

mutate_all(mydf, .funs = list(index = ~./mean(.)))

  median_age bachelor_rate  emp_rate median_age_index bachelor_rate_index emp_rate_index
1       35.2    0.05223252 0.6185185           1.1264           0.3705394      1.0224261
2       22.5    0.40045249 0.7744094           0.7200           2.8408247      1.2801176
3       36.3    0.26750261 0.8210526           1.1616           1.8976733      1.3572199
4       36.8    0.07753825 0.5801861           1.1776           0.5500592      0.9590617
5       29.9    0.04805492 0.3593074           0.9568           0.3409034      0.5939439
6       26.8    0.00000000 0.4762367           0.8576           0.0000000      0.7872308

ДАННЫЕ

mydf <- structure(list(median_age = c(35.2, 22.5, 36.3, 36.8, 29.9, 26.8
), bachelor_rate = c(0.05223252, 0.40045249, 0.26750261, 0.07753825, 
0.04805492, 0), emp_rate = c(0.6185185, 0.7744094, 0.8210526, 
0.5801861, 0.3593074, 0.4762367)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...