Как свернуть в фрейм данных с минимальными значениями int из списка фреймов данных - PullRequest
1 голос
/ 11 июля 2019

Я хочу получить свернутый фрейм данных из списка фреймов данных с минимальными значениями для каждой ячейки на основе той же ячейки для всех фреймов данных, доступных в списке.

В приведенном ниже примере5 строк и 2 столбца.Если я запускаю код, показанный ниже, для фрейма данных, который имеет 60000 строк и 15 столбцов, это будет очень медленно.Я хочу определить, существует ли более эффективный способ решения этой проблемы.

one_df <- data.frame(v1 = c(0,1,2,3,4), v2 = c(5,6,7,8,9))
two_df <- data.frame(v1 = c(1,2,2,3,4), v2 = c(5,6,7,7,8))
my_list <- list(one_df, two_df)
num_rows <- dim(one_df)[1]
num_cols <- dim(one_df)[2]
result_df <- one_df ## The collapsed data frame has the same dimensions as the input data frame
for (num_row in 1:num_rows){
    for (num_col in 1:num_cols){
        result_df[num_row, num_col] <- do.call("min", lapply(my_list, function(x) x[num_row, num_col]))
    }
}

Пример ввода:

> my_list
[[1]]
  v1 v2
1  0  5
2  1  6
3  2  7
4  3  8
5  4  9

[[2]]
  v1 v2
1  1  5
2  2  6
3  2  7
4  3  7
5  4  8

Ожидаемый вывод для примера:

> result_df
  v1 v2
1  0  5
2  1  6
3  2  7
4  3  7
5  4  8

Ответы [ 2 ]

4 голосов
/ 11 июля 2019

Попробуйте

do.call(pmin, my_list)
  v1 v2
1  0  5
2  1  6
3  2  7
4  3  7
5  4  8

То же, что и звонок

pmin(my_list[[1]], my_list[[2]], ..., my_list[[n]])
1 голос
/ 11 июля 2019

Опция с reduce

library(purrr)
reduce(my_list, pmin)

Кроме того, она может быть быстрее до unlist, а затем сделать min для нее

my_list1 <- my_list[rep(seq_along(my_list), each = 1e5)]
system.time(tapply(unlist(my_list1), rep(1:10,  length(my_list1), FUN = min)))
#  user  system elapsed 
# 0.334   0.013   0.348 

system.time(reduce(my_list1, pmin))
#   user  system elapsed 
# 29.665   0.141  29.729 
system.time(do.call(pmin, my_list1))
#   user  system elapsed 
# 25.371   0.109  25.450 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...