獨斷論

통계 R 사용설명서 8 - data frame의 변수명 변경 본문

과학과 기술/R 통계

통계 R 사용설명서 8 - data frame의 변수명 변경

부르칸 2016. 5. 7. 02:29

data frame에 각 열마다 변수병이 들어가는데 요놈이 맘에 안들어 바꾸고자 할때 어떻게 해야할까?

 

우선 data frame을 만들어보자.

이건 앞서 통계 R 사용설명서 7 - 변수생성과 recoding에서 만들었던건데 mydat라는 변수에 데이터를 아직도 가지고 있다면 아래 script를 실행할 필요가 없다.

> id <- c(1, 2, 3, 4, 5)
 > date <- c("May/03/2016", "Feb/12/2016", "Jul/21/2016", "Aug/18/2016", "Dec/01/2016")
 > country <- c("Korea", "Japan", "China", "Korea", "Mongol")
 > gender <- c("M", "F", "F", "F", "M")
 > age <- c(20, 21, 53, 82, 25)
 > q1 <- c(10, 3, 5, 8, 4)
 > q2 <- c(7, NA, 4, 5, 9)
 > q3 <- c(9, NA, 8, 9, 9)
 > q4 <- c(8, 6, 10, 4, 5)
 > q5 <- c(3, 6, 8, 3, 5)
 > mydat <- data.frame(id, date, country, gender, age, q1, q2, q3, q4,
 +                     stringAsFactors = FALSE)
 >
 > mydat <- within(mydat, {
 +                         agecat <- NA
 +                         agecat[age <= 25] <- "young"
 +                         agecat[age > 25 & age <= 60] <- "middle"
 +                         agecat[age > 60] <- "elder" })
 > mydat
   id        date country gender age q1 q2 q3 q4 stringAsFactors agecat
 1  1 May/03/2016   Korea      M  20 10  7  9  8           FALSE  young
 2  2 Feb/12/2016   Japan      F  21  3 NA NA  6           FALSE  young
 3  3 Jul/21/2016   China      F  53  5  4  8 10           FALSE middle
 4  4 Aug/18/2016   Korea      F  82  8  5  9  4           FALSE  elder
 5  5 Dec/01/2016  Mongol      M  25  4  9  9  5           FALSE  young


만약 mydat안에 있는 변수인 agecat가 맘에 안들어서 age_category라고 바꾸고자한다면 어떻게 해야할까?

가장 간단한 방법은 R에서 제공하는 대화창을 이용하는 것이다.

 

대화창 이용하여 변수명 변경

fix( ) 명령어를 치면 쉽다.

> fix(mydat)

R console에서 위와 같이 입력하면 아래와 같은 창이 하나 뜬다.

 

맨 오른쪽에 agecat라는 변수명을 한 번만 클릭한다. 만약 agecat가 보이지 않는다면 창을 좀더 크게 하면 보일것이다.

변수명에 마우스를 대고 한 번 클릭하면 아래와 같은 창이 또 하나 뜨는데

 

 

여기에 age_category라고 바꾼후에 엔터를 친다.

그리고는 Data Editor를 닫는다.

다시 R console로 넘어가게 되는데 여기서 mydat를 확인하면 된다. 

 > mydat
   id        date country gender age q1 q2 q3 q4 stringAsFactors age_category
 1  1 May/03/2016   Korea      M  20 10  7  9  8           FALSE        young
 2  2 Feb/12/2016   Japan      F  21  3 NA NA  6           FALSE        young
 3  3 Jul/21/2016   China      F  53  5  4  8 10           FALSE       middle
 4  4 Aug/18/2016   Korea      F  82  8  5  9  4           FALSE        elder
 5  5 Dec/01/2016  Mongol      M  25  4  9  9  5           FALSE        young
> # 또는 아래와 같이 확인할수도 있다.

> names(mydat)
 [1] "id"              "date"            "country"         "gender"        
 [5] "age"             "q1"              "q2"              "q3"            
 [9] "q4"              "stringAsFactors" "age_category"

 

 

Script로만 변수명 변경

names()라는 명령어는 data frame의 변수를 가져오게 된다는 것을 바로 위의 script에서 보았다.

names(mydat)는 1x11의 벡터인데 각각의 원소를 문자열로 갖는다. 따라서 names(mydat)[11] age_category가 된다. names(mydat)[11]의 값만 바꾸면 변수명이 바뀌게 된다.

> names(mydat)[11] <- "age_cat"
> mydat
   id        date country gender age q1 q2 q3 q4 stringAsFactors age_cat
 1  1 May/03/2016   Korea      M  20 10  7  9  8           FALSE   young
 2  2 Feb/12/2016   Japan      F  21  3 NA NA  6           FALSE   young
 3  3 Jul/21/2016   China      F  53  5  4  8 10           FALSE  middle
 4  4 Aug/18/2016   Korea      F  82  8  5  9  4           FALSE   elder
 5  5 Dec/01/2016  Mongol      M  25  4  9  9  5           FALSE   young

만약 한꺼번에 여러개의 변수명을 바꾸고자 한다면 아래와 같이 하면 된다.

 > names(mydat)[c(1, 11)] <- c("subj", "agecat")
 > mydat
   subj        date country gender age q1 q2 q3 q4 stringAsFactors agecat
 1    1 May/03/2016   Korea      M  20 10  7  9  8           FALSE  young
 2    2 Feb/12/2016   Japan      F  21  3 NA NA  6           FALSE  young
 3    3 Jul/21/2016   China      F  53  5  4  8 10           FALSE middle
 4    4 Aug/18/2016   Korea      F  82  8  5  9  4           FALSE  elder
 5    5 Dec/01/2016  Mongol      M  25  4  9  9  5           FALSE  young

 


idsubj로 바꾸었고 age_category를 다시 agecat으로 돌려놓았다.

 

 

Comments