Получение долей столбцов 5 лучших значений по столбцам - PullRequest
0 голосов
/ 13 мая 2018

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

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

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

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

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

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

1 Ответ

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

Мы можем циклически перебрать list с помощью lapply, разделить набор данных на суммы столбцов каждого столбца ('x1'), выбрать верхние 5, пройдя (sapply) по каждому столбцу, sort и получите элементы head, а затем cbind list для создания набора данных из двух столбцов

do.call(cbind,lapply(list, function(x) {
   x1 <- x/colSums(x)[col(x)]
   sapply(x1, function(y) sum(head(sort(y, decreasing = TRUE), 5)))}))

Или с tidyverse

library(tidyverse)
map(list, ~ .x %>% 
               summarise_all(funs(sum(tail(sort(./sum(.)), 5)))) %>% 
               unlist %>%
               as_tibble) %>%
   bind_cols
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...