我是新来的,所以这个问题有点基础,但它可能也会帮助其他人获得一个好的开始。。。
如何将以下内容改写为循环,并将年份包含在新名称中,如下所示。。。
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)
这应该创建DFNUM2011
、DFNUM2012
和DFNUM2013
数据帧。