R - Как выполнить одну и ту же операцию с несколькими переменными

В R мне часто приходится делать одну и ту же операцию для группы переменных.

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

df_model1
df_model2
df_model3
df_model4
df_model5

и у меня есть еще один фрейм данных под названием df_obs,

Что мне нужно сделать, это объединить каждый из df-model* фрейм данных в df_obs,

Обычно я делаю что-то вроде этого:

new_df_model1 <- merge(df_obs, df_model1, all=TRUE)
new_df_model2 <- merge(df_obs, df_model2, all=TRUE)
...

и так далее, что явно не очень практично.

Как я могу сделать эту операцию более программной?

2 ответа

Решение

Вы могли бы использовать Map в mergedf_obs и df_model наборы данных в list,

 lst <- Map(`merge`, list(df_obs), 
          mget(paste0('df_model', 1:5)), MoreArgs=list(all=TRUE))

Если выходные наборы данных в списке должны быть отдельными объектами data.frame в глобальной среде, мы можем использовать list2env (но я бы предпочел оставить его в списке, так как большинство операций можно выполнить внутри списка)

 names(lst) <- paste('new',paste0('df_model', 1:5), sep="_")
 list2env(lst, envir= .GlobalEnv)

Или используя lapply

 lapply(mget(paste0('df_model', 1:5)), merge, x = df_obs, all=TRUE)

Вы могли бы использовать для цикла

for(i in 1:5) {
  data <- paste("new_df_model", i, sep = "")
  model <- merge(df_obs, paste("df_model", i, sep = ""), all = TRUE)
  assign(data, model)
}
Другие вопросы по тегам