在R中创建新列时,使用变量名称引用数据框。

3

我有一系列包含两列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<-"

有没有其他方式来表达列赋值命令,以便我可以避免这个错误,或者解决方案更加复杂?


如果您将所有数据框放入一个命名列表中,这将会容易得多。 - joran
1个回答

5

如果您将所有数据框放入命名列表中,那么有三种不同的选项:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接