Добавить столбцы к списку информационных кадров, используя lapply и mapply - PullRequest
0 голосов
/ 29 октября 2019

У меня есть список фреймов данных для индивидуальной обработки, который выглядит следующим образом:

df_list <- list(A1 = data.frame(v1 = 1:10,
                                v2 = 11:20),
                A2 = data.frame(v1 = 21:30,
                                v2 = 31:40))
df_list

Использование lapply позволяет мне запускать функцию над списком фреймов, например так:

library(tidyverse)
some_func <- function(lizt, comp = 2){
  lizt <- lapply(lizt, function(x){
    x <- x %>%
      mutate(IMPORTANT_v3 = v2 + comp)
    return(x)
  })
}
df_list_1 <- some_func(df_list)
df_list_1

Пока все хорошо, но мне нужно запустить функцию несколько раз с разными аргументами, поэтому использование mapply возвращает:

df_list_2 <- mapply(some_func,
                    comp = c(2, 3, 4),
                    MoreArgs = list(
                      lizt = df_list
                      ),
                    SIMPLIFY = F
)
df_list_2

Это создает новый список фреймов данных для каждого аргумента, переданного функциив mapply дает мне 3 списка по 2 кадра данных. Это хорошо, но вывод, который я ищу, заключается в добавлении нового столбца к каждому исходному кадру данных для каждого аргумента в mapply, который будет выглядеть следующим образом:

desired_df_list <- list(A1 = data.frame(v1 = 1:10,
                                        v2 = 11:20,
                                        IMPORTANT_v3 = 13:22,
                                        IMPORTANT_v4 = 14:23,
                                        IMPORTANT_v5 = 15:24),
                        A2 = data.frame(v1 = 21:30,
                                        v2 = 31:40,
                                        IMPORTANT_v3 = 33:42,
                                        IMPORTANT_v4 = 34:43,
                                        IMPORTANT_v5 = 35:44))
desired_df_list

Как я могу изменить вывод списковсписков фреймов данных, чтобы изолировать и добавить только нужные новые столбцы (IMPORTANT_v3) к исходному фрейму данных? Также открыты для других опций, таких как изменение нескольких столбцов внутри lapply с использованием mapply, но я пока не выяснил, как это кодировать. Спасибо!

1 Ответ

0 голосов
/ 29 октября 2019

Решено так:

main_func <- function(lizt, comp = c(2:4)){
  lizt <- lapply(lizt, function(x){

    df <- mapply(movavg,
                 n = comp,
                 type = "w",
                 MoreArgs = list(x$v2),
                 SIMPLIFY = T
    )
    colnames(df) <- paste0("IMPORTANT_v", 1:ncol(df))
    print(df)
    print(x)
    x <- cbind(x, df)
    return(x)
  })

}
desired_df_list_complete <- main_func(df_list)
desired_df_list_complete

с использованием movavg из pracma пакета в этом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...