2014-03-13 3 views
0

네 개의 데이터 프레임 (dw, ds, dmw, dne) 헤더의 이름을 바꾸고 싶습니다. 그들 모두에는 6 개의 기둥이 있습니다. 내가 잘못 가고헤더의 이름 바꾸기 R

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

:

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

하지만이 오류는 무엇입니까?

답변

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 *', 값 = c ("lon", "lat", "area", "fd", "tp": : 2 차원 이하의 객체 –

+0

이 편집 된 명제가 작동합니까? –

+0

Sweet! 예, 작동합니다. 처음에 잘못 나온 곳이 아직 확실하지 않습니다. 단순 해 보였습니다. –

1

나는이 목록을 사용하여이 문제를 접근하는 R 방법 더 말할 것입니다. 목록에 데이터를 저장하면 특히 (예 : data.frame 초) 개별 요소를 반복적으로 조작하려는 경우에 특히 편리합니다. 여기서는 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의 장점은 무엇입니까? –