2013-05-07 41 views
2

我有一系列十个数据帧,其中包含两列x和y。我想为包含数据框名称的每个数据框添加一个新列。我遇到的问题是如何使用变量引用数据框,以便我可以迭代执行此任务。除了刚刚通过变量名引用它,我自己也尝试get()方法如下:在R中创建新列时引用一个变量名称的数据框

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<-" 

有另一种方式来短语列分配命令,以便我可以解决这个错误,或解决方案更复杂?

+0

如果你把你所有的数据帧在名为列表这将是非常非常容易。 – joran 2013-05-07 15:38:52

回答

4

这里有三种不同的选择,如果你把你所有的数据帧到一个名为列表:

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) 
相关问题