Расчет индекса Херфиндаля по списку фреймов данных в R - PullRequest
0 голосов
/ 22 мая 2018

У меня в списке хранятся следующие данные:

set.seed(12345)
df1 = data.frame(replicate(10,sample(0:500,100,rep=TRUE)))
df2 = data.frame(replicate(10,sample(0:500,100,rep=TRUE)))
list = list(df1, df2)

Как мне сделать следующее:

1) Для каждого столбца получить долю каждого элемента в столбцесумма (т. е. каждый элемент делится на сумму в столбце), а затем возводит в квадрат долю

2). Возьмем сумму каждого столбца из шага 1

. В результате получается список2 вектора (по одному на каждый из df1 и df2), содержащих по 10 баллов каждый.

Мой код, показанный ниже, не работает.Любой совет приветствуется.Большое спасибо заранее!

 do.call(cbind,lapply(list, function(x) {
 x1 <- ((x/colSums(x))^2)[col(x)]
 sapply(x1, function(y) sum(y))}))

1 Ответ

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

В dplyr вы можете использовать mutate_all, чтобы применить функцию ко всем столбцам.Затем вы можете использовать funs для генерации функции для оценки.Наконец, вы можете суммировать все столбцы с colSums

library(dplyr)
df1 %>% mutate_all(funs((./sum(.))^2)) %>% colSums

#     X1         X2         X3         X4         X5         X6         X7         X8         X9        X10 
# 0.01346280 0.01247748 0.01348066 0.01246220 0.01310924 0.01279258 0.01316828 0.01322423 0.01340310 0.01294876 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...