当我有不同年份的相同框架并且名称中有年份时,如何将其重写为循环?

How to rewrite as a loop when I have identical frames for different years and the year is in the name?

我是新手,所以这个问题有点基础,但它可能会帮助其他人也有一个良好的开端...

如何将下面的代码重写为一个循环并让它在新名称中包含年份,如下所示...

DFNUM2011 = DF2011[,!(names(DF2011) %in% mydummies)]
DFNUM2012 = DF2012[,!(names(DF2012) %in% mydummies)]
DFNUM2013 = DF2013[,!(names(DF2013) %in% mydummies)]

我试过了

 df.list<-list("2011","2012","2013")
> for (i in df.list){
+   DFNUM[[i]] = DF[[i]][,!(names(DF2011) %in% mydummies)]
+ }
Error in DF : object 'DF' not found

这可行:

#List
List <- list(DFNUM2011,DFNUM2012,DFNUM2013)
#Loop
for (i in seq_along(List))
{
   List[[i]] = List[[i]][,!(names(List[[i]]) %in% mydummies)]
}

一个工作示例可以是:

#Example
List <- list(iris,mtcars)
mydummies <- c('Species','mpg')
#Loop
for (i in seq_along(List))
{
  List[[i]] = List[[i]][,!(names(List[[i]]) %in% mydummies)]
}

还有一种没有循环的更紧凑的方式:

#Code
List <- lapply(List, function(x) {x<-x[,!names(x) %in% mydummies]})

您可以使用:

library(purrr)

n <- 2011:2013
result <- map(mget(paste0('DF', n)), ~keep(.x, !(names(.x) %in% mydummies)))

如果您想在全局环境中创建具有不同名称的新数据框。

names(result) <- paste0('DFNUM', n)
list2env(result, .GlobalEnv)

这应该创建 DFNUM2011DFNUM2012DFNUM2013 数据帧。