R의 데이터 프레임에서 열 이름을 변경하는 방법은 무엇입니까? [닫은]


9
 names(mydat)[c(name)]<-c("newname") 

이것으로부터, 데이터 프레임 mydat의 열 / 변수 이름 "name"이 "newname"으로 대체된다는 것을 알고 있습니다.

내 질문은 루프 로이 작업을 수행하여 다음과 같은 것을 갖기를 원한다는 것입니다.

newname1 newname2 newname3 newname4 등 어떻게합니까?

이것이 한 일이며 작동하지 않았습니다.

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

이것을 코딩하는 방법이 있습니까? 도움을 줄 수있는 모든 분들께 감사드립니다. 오우수 이삭


4
이 질문은 순전히 프로그래밍에 관한 것이므로 주제가 아닌 것 같습니다.
gung-Monica Monica 복원

당신이 (예를 들어, abcde_1_1, abcde_2_2, abcde_3_3 ...)가 자주 일부 데이터 세트에서 일어나는 일부 추한 변수 이름을 이름을 변경해야하는 경우 퀼트 릭스에서 다운로드 : ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
시차로 인한 피로

답변:


10

가장 확실한 해결책은 다음과 같이 for 루프에서 코드를 변경하는 것입니다.

   names(mydat)[c(name)] <- paste("newname",i,sep="")

그러나 변수 name가 무엇인지 명확히해야합니다 . 현재이 루프는 단일 열의 이름을 4 번 바꿉니다.

일반적으로 변경하려는 이름이 벡터 인 경우 표준 하위 설정 절차입니다.

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

안녕하세요 Mpiktas, 솔루션이 훌륭하게 작동합니다. 많은 감사합니다. 모두에게 감사드립니다
Son

1
@Owusu,이 사이트에서 감사의 표현은 답변과 그들의 수용을 찬성합니다. FAQ를 참조하십시오 . 어느 쪽이든 도움이되어 기쁘다.
mpiktas

6

사용해보십시오 sprintf또는 paste다음과 같이 :

names(mydat)<-sprintf("name%d",1:10)

또한, names(mydat)[c(name)]이건 말도 안되는 말이다 . c(name)그냥 쓰는 것과 동일 name하며 "라는 변수의 값을 얻습니다 name"; 대괄호는 적어도 숫자 또는 부울 인덱스를 보유한 names(mydat)경우에만 요소를 추출합니다 name.

로 호출 name되는 열을 바꾸려면 name1, name2, ..., nameN다음과 같이 사용하십시오.

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

편집 : 글쎄, 중복 된 열 이름을 제거하려면 더 쉬운 방법이 있습니다. R에는 make.names이 문제를 해결 하는 기능이 있습니다. 다음과 같이 사용할 수 있습니다.

names(mydat)<-make.names(names(mydat),unique=TRUE)

더 짧아도 다음과 같이 쓰면됩니다.

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

@mbq, == 문자열에 부분적으로 일치합니까?
mpiktas

@mpiktas 아니요, 여기서는 정확히 일치해야합니다. grepl더 일반적인 일을하는 것이 좋습니다.

@mbq, yes이지만 이름이 같은 열이 여러 개 있다고 가정합니다. R은 가능하지만이 기능을 사용하지 않으려 고합니다.
mpiktas

@mpiktas OP와 마찬가지로이 질문도 마찬가지입니다.

@mbq names (mydat) [c (name)] 와의 혼동을 분명히 해주셔서 감사 합니다. OP가 작성 했으므로 열 / 변수 이름 "name" 이 "가능한지 아시나요 ?" 그리고 이름으로 이름에 액세스하려고했습니다 ... 바보 같은;). 질문을 편집 해 주시겠습니까?
steffen

5

나는 같은 문제가 있었고이 코드로 해결했다.

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.