# 간단한 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 수준의 첫 번째 인스턴스만 대체
댓글