2017-05-30 261 views
0

我需要更改具有相同名稱結構的多個數據框的列名稱。我想使用循環,但我仍然有相同的問題。所以,我打開lapply或任何使用:在循環中,使用{i}作爲文本,或更改循環中的列名/ lapply

這就是我想要的:

colnames(gom2)<-c(paste("d2", colnames(gom2),sep="_")) 
colnames(gom3)<-c(paste("d3", colnames(gom3),sep="_")) 
colnames(gom4)<-c(paste("d4", colnames(gom4),sep="_")) 
colnames(gom5)<-c(paste("d5", colnames(gom5),sep="_")) 
colnames(gom6)<-c(paste("d6", colnames(gom6),sep="_")) 

這是我的嘗試:

for (i in 2:6){ 
    colnames(gom{i})<-c(paste("d{i}", colnames(gom{i}), sep="_") 
    } 

我知道這個代碼是錯誤的,但我就是」不要讓{i}作爲文本與它一起工作。只要它很直觀,我就可以使用任何解決方案。我看到了其他解決方案,並嘗試過,但沒有取得太大的成功,並且無法理解他們在做什麼。 謝謝!

回答

0

我會嘗試這樣的事:

for (i in 2:6){ 
    df<- paste0("gom", i) 
    colnames(eval(parse(text=df)))<- paste("d", i, colnames(eval(parse(text=df))), sep="_") 
} 

我們用paste0創建數據框的每個i的名稱。然後函數evalparse首先解析字符向量,即在這種情況下爲df,然後對其進行評估。

順便說一句我假設gom{i}是打算意味着gom2, gom3等,d{i}應該打電話d1, d2等,但它不會工作。

0

這可能會做你所需要的。

for (i in 2:6){ 
    temp <- get(paste0("gom",i)) 
    colnames(temp) <- paste0("gom",i,"_", colnames(temp)) 
    assign(paste0("gom",i), temp) 
    rm(temp) 
}