在 R 中创建新列时通过变量名引用数据框

标签 r variables get dataframe

我有一系列十个数据框,其中包含两列 x 和 y。我想向包含数据框名称的每个数据框添加一个新列。我遇到的问题是如何使用变量引用数据框,以便我可以迭代地执行此任务。除了通过变量名引用它之外,我还尝试了 get() 如下:

for(i in 1:10){
   name <- paste(substr(fileList, 3, 7),i, sep = "")
   assign(newName, as.data.frame(get(name)))
   get(newName)$Species = c(paste(substr(fileList, 3, 7),i, sep = ""))
}

但是,当我这样做时,出现以下错误:

Error in get(newName)$Species = c(paste(substr(fileList[a], 3, 7), i,  : 
  could not find function "get<-"

是否有另一种方式来表达列分配命令以便我可以解决此错误,或者解决方案是否更复杂?

最佳答案

如果将所有数据框放入一个命名列表中,这里有三个不同的选项:

df_list <- list(a = data.frame(x = 1:5),
                b = data.frame(x = 1:5))
#Option 1               
for (i in seq_along(df_list)){
    df_list[[i]][,'Species'] <- names(df_list)[i]
}

#Option 2
tmp <- do.call(rbind,df_list)
tmp$Species <- rep(names(df_list),times = sapply(df_list,nrow))
split(tmp,tmp$Species)

#Option 3
mapply(function(x,y) {x$Species <- y; x},df_list,names(df_list),SIMPLIFY = FALSE)

关于在 R 中创建新列时通过变量名引用数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423000/

相关文章:

php: 在某些情况下避免使用 __get?

r - c() 故障?

javascript - Axios GET 请求不起作用

Rcpp - 如何检查任何属性是否为 NULL

Excel vba 代码停止工作(变量未定义)

字符常量对其类型而言太长

Java:在 lambda 中分配一个变量

controller - AngularJS - 按 ID 获取数据

r - 使用ifelse()通过引用另一个不同长度的数据帧来替换一个数据帧中的NA

r - 错误 : x must be atomic for 'sort.list'