2012-10-14 6 views
4

코드 팩과 함께 제공되는 R의 데이터 세트로 작업하고 있는데, 이는 기본적으로 내 요인 변수의 여러 레벨에 대한 라벨이 무엇인지 알려줍니다. 예를 들어, 코드북에서는 "Sex"변수에서 0은 "Female"이고 1은 "Male"이라는 것을 알 수 있습니다. 이 정보를 사용하여 변수에 값을 표시합니다.factor()의 지정되지 않은 레벨

그러나 최근, 나는 당황 스럽지만 코드북이 완전하지 않다는 것을 발견했습니다. 예를 들어, 하나의 변수가 "예"이고 2가 "아니오"인 변수를 알려주지 만 데이터에서 볼 수있는 7s, 8s 및 9s는 무엇인지 알려주지 않습니다.

data$variable <- factor(data$variable, 
         levels=c(1, 2, 7, 8, 9), 
         labels=c("Yes", "No", "7", "8", "9")) 

기본적으로, 자신으로 분류 할 수있는 코드북에 지정되지 않은 모든 수준 싶습니다 내가 뭘하고 싶은 (같은 또는 무언가)를 다음과 같이이 변수 레이블입니다. 내가 겪고있는 문제는이 코드북에는 이들 중 상당수가 누락되어 있으며 실제로 변수에 대한 위 코드를 작성하기 위해 내 데이터에서 정의되지 않은 모든 값을 수동으로 살펴볼 필요가 없다는 것입니다. 또한 누락 된 레벨을 제외하면 R은 자동으로 해당 레이블을 "NA"로 표시합니다. 이는 원하지 않습니다.

요약 : 지정되지 않은 모든 레벨을 "NA"로 표시하는 대신 factor()를 사용하는 방법을 알아 내려고 노력하고 있습니다.

답변

5

우리가 장점을 사용할 수 있도록 요소를 만든 후에 수준을 변환 할 수 있습니다.

mydat <- c(1, 2, 3,2,3,4,3,2,1,2,4,4,6,5,7,8,9) 
# convert to factor ignoring code book 
dat <- factor(mydat) 
# Create map corresponding to codebook levels 
mymap <- c("1" = "Yes", "2" = "No") 
# Figure out which levels are accounted for by codebook 
id <- levels(dat) %in% names(mymap) 
# Convert to appropriate values 
levels(dat)[id] <- mymap[levels(dat)[id]] 

또는 (그리고 아마도 좀 더 쉽게)

끝내
# alternatively we can construct the map if we have two vectors 
# of the value and the codebook value 
val <- c(1, 2) 
lev <- c("Yes", "No") 

dat <- factor(mydat) 
levels(dat)[val] <- lev 
+0

, 정말 고마워요! 나는 후에 레이블을 변경한다고 생각조차하지 않았다! 나는 지금이 아이스크림을 모두 먹는 것을 멈출 수있다! – RickyB