2013-05-07 79 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) 
相關問題