Home > database >  R - pipe multiple dataframes in a loop
R - pipe multiple dataframes in a loop

Time:06-09

I need to repeat a simple operation for over 50 dataframes, this calls for a loop, but I can't put together the right code.

I am creating a new dataframe with only 4 variables that are obtained by grouping and summarising with dplyr.

dataframes <- list(E5000, E5015, E5030, E5045, E5060, E5075, E5090)

E5000_stat <- E5000_stat %>%
  group_by(indeximage) %>%
  summarise(n_drop = n(), median_area = median(Area..mm.2..), tot_area = sum(Area..mm.2..))

I would like to have the same operation repeated in a loop for all the dataframes, so not to have to manually modify and re-run the same 4 lines of codes 50 times.

Any help is highly appreciated.

CodePudding user response:

Use lapply or purrr::map -

library(dplyr)

apply_fun <- function(df) {
  df %>%
    group_by(indeximage) %>%
    summarise(n_drop = n(), 
              median_area = median(Area..mm.2..), 
              tot_area = sum(Area..mm.2..))
}

dataframes <- list(E5000, E5015, E5030, E5045, E5060, E5075, E5090)
out <- lapply(dataframes, apply_fun)
out

CodePudding user response:

You can use purrr::map or purrr::map_df (depending if you want the result to be a tibble or a `list):

E_stat_func <- . %>%
  group_by(indeximage) %>%
  summarise(
    n_drop = n(),
    median_area = median(Area..mm.2..),
    tot_area = sum(Area..mm.2..)
  )

dataframes_summary <- dataframes %>%
  # map(E_stat_func) 
  map_df(E_stat_func)
  • Related