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 수준의 첫 번째 인스턴스만 대체
반응형
'R 프로그래밍 > R basic' 카테고리의 다른 글
데이터 프레임의 열 이름 바꾸기 (0) | 2022.01.09 |
---|---|
정렬(sorting)하기 (0) | 2022.01.05 |
데이터 요약(Data summary) (0) | 2021.12.31 |
[R 그래픽스]정당별 국회의원 의석 수 그래프로 표현하기 (0) | 2021.12.19 |
[R 그래픽스] 워드 클라우드(Word Cloud) 생성하기 (0) | 2021.10.31 |
댓글