У меня есть список фреймов данных, которыми можно управлять индивидуально, он выглядит следующим образом:
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 фреймов данных. Это хорошо, но результат, который я ищу, - добавить новый столбец в каждый исходный фрейм данных для каждого аргумента в сопоставлении, который будет выглядеть следующим образом:
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
, но я еще не понял, как это закодировать. Спасибо!