在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)
...
等等,这显然不太实用。
如何让这项操作更具编程性?
答案 0 :(得分:3)
您可以在Map
中使用merge
到df_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)
答案 1 :(得分:1)
您可以使用for循环
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)
}