본문 바로가기
R 프로그래밍/R basic

factor level 이름 변경하기

by 찐남 2022. 1. 6.
Cookbook for R을 기반으로 하여 작성하였습니다.

 

 

factor level의 이름을 변경하려면 어떻게 할까요?

# 간단한 factor 생성
x <- factor(c("alpha","beta","gamma","alpha","beta"))
x
levels(x)

 

가장 쉬운 방법은 plyr 패키지에서 revalue() 또는 mapvalues() 함수를 사용하는 거예요.

library(plyr)
revalue(x, c("beta"="two", "gamma"="three"))
mapvalues(x, from = c("beta", "gamma"), to = c("two", "three"))

 

plyr 패키지에 의존하고 싶지 않다면, R의 내장 함수로 다음을 수행하시면 돼요.

이러한 메서드는 x를 직접 수정하기 때문에, 결과를 x에 다시 저장할 필요가 없어요.

# "beta"를 "two"로 변경
levels(x)[levels(x)=="beta"] <- "two"

# 위치별로 이름을 바꿀 수도 있지만 약간 위험한 방법입니다.
# factor level의 수나 위치가 변경되면 잘못된 데이터가 발생할 수 있어요.
# 레벨 목록에서 인덱스로 이름 바꾸기: 세 번째 항목인 "gamma"를 "three"로 변경
levels(x)[3] <- "three"
x
# 모든 level 변경하기
levels(x) <- c("one","two","three")
x

 

factor level의 이름을 plyr 없이 이름으로 바꿀 수 있지만,

이는 모든 level이 list에 있는 경우에만 작동한다는 점에 조심하셔야 해요. list에 없으면 NA로 대체됩니다.

# 모든 levels을 이름으로 변경
x <- factor(c("alpha","beta","gamma","alpha","beta"))
levels(x) <- list(A="alpha", B="beta", C="gamma")
x

 

R의 문자열 검색 및 바꾸기 기능을 사용하여 factor level의 이름을 바꾸는 것도 가능해요.

주변의 "alpha" 주변에 있는 ^ 및 $의 의미는 전체 문자열이 일치하는지 확인하기 위한 것이에요.

^ 및 $의 표현이 없으면,

alphabet이라는 level이 있으면 그것도 일치한다고 판단하고,

onebet으로 변경돼요.

# 간단한 factor 생성
x <- factor(c("alpha","beta","gamma","alpha","beta"))
x

levels(x) <- sub("^alpha$", "one", levels(x))
x

# 모든 열에서 "a"의 모든 인스턴스를 "X"로 변경
levels(x) <- gsub("a", "X", levels(x))
x

# gsub()는 각 factor level에서 패턴의 모든 인스턴스 대체 
# sub()는 각 factor level 수준의 첫 번째 인스턴스만 대체

 

반응형

댓글