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



我是新来的,所以这个问题有点基础,但它可能也会帮助其他人获得一个好的开始。。。

如何将以下内容改写为循环,并将年份包含在新名称中,如下所示。。。

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数据帧。

最新更新