2014-03-13 26 views
0

我想重命名四個數據框(dw,ds,dmw,dne)的標頭。他們全部有六列。在R中重命名標頭

regions <- c("dw","ds","dmw","dne") 
for (i in regions){ 
names(i)=c("lon","lat","area","fd","tp","rt") 
} 

但我收到此錯誤:

Error in names(i) = c("lon", "lat", "area", "fd", "tp", "rt") : 
'names' attribute [6] must be the same length as the vector [1] 

我要去哪裏錯了?

回答

0

使用colnames來代替,而get來引用變量:

for (i in regions){ 
    dat <- get(i) 
    colnames(dat) <- c("lon","lat","area","fd","tp","rt") 
    assign(i, dat) 
} 
+0

謝謝。現在我收到這個錯誤。 'colnames <-'('* tmp *',value = c(「lon」,「lat」,「area」,「fd」,「tp」,: )錯誤嘗試設置'colnames'小於2維的對象 –

+0

這是否編輯過提議工作? –

+0

甜!是的,它的工作原理仍然不清楚我第一次出錯的地方,看起來很簡單 –

1

我會說這是更將R的方式來處理這個使用列表。將數據存儲在列表中會讓您的生活更輕鬆(大部分時間),特別是當您要對單個元素進行重複操作時(在此例中爲data.frame s)。在這裏我使用lapply,因爲您想要以一致的方式更改名稱,但使用mapply您可以使用不同的名稱分別更改每個data.frame

首先創建一些你應該完成的數據 - 我相信你已經分配給了全球環境。

dw <- mtcars[1:4, 1:6] 
ds <- mtcars[1:4, 1:6] 
dmw <- mtcars[1:4, 1:6] 
dne <- mtcars[1:4, 1:6] 

現在包裝所有美好的事物了一個列表(或更好,但在閱讀/創建一個列表,如果你能)

lst <- list(dw, ds, dmw, dne) 
## name the list 
names(lst) <- c("dw","ds","dmw","dne") 

## Now we can use lapply to add the column names  
(out <- lapply(lst, function(x) { 
    setNames(x, nm = c("lon","lat","area","fd","tp","rt")) 
})) 

我會繼續經營出來的使用索引列表和操作列表中的單個元素/對象(請參閱out[["dw"]]爲您提供了什麼)。如果您真的想要重新分配到全球環境,請使用list2env

list2env(out, envir = .GlobalEnv) 
dne 
+0

'setNames'在這裏也很方便 – joran

+0

@joran,從來沒有嘗試過,很好,我喜歡(並且包含在答案中) –

+0

謝謝。有一個問題:這種方式如何優於其他答案?lapply有什麼好處? –