当我有不同年份的相同框架并且名称中有年份时,如何将其重写为循环?
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)
这应该创建 DFNUM2011
、DFNUM2012
和 DFNUM2013
数据帧。
我是新手,所以这个问题有点基础,但它可能会帮助其他人也有一个良好的开端...
如何将下面的代码重写为一个循环并让它在新名称中包含年份,如下所示...
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
数据帧。