2010-02-26 1 views
9

변수 집합을 다시 코딩해야 할 때마다 SPSS recode 기능을 염두에 두어야합니다. 나는 그것이 아주 간단하다는 것을 인정해야한다. car 패키지에 비슷한 recode 함수가 있습니다. 트릭을 수행하지만, factor을 사용하여 작업을 완료하려고한다고 가정 해 봅시다.다른 레벨을 가진 recode/relevel data.frame 요소

내가 따라서 6S와, 7S와 2S을 1S 대체 I 변수 값을 "반전"하고자하는 1 ~ 7의 값 범위 여러 변수 data.frame있는 등 5S와 3S 난 factor 기능을 이용할 수

# create dummy factor 
set.seed(100) 
x <- as.factor(round(runif(100,1,7))) 
y <- factor(x, levels = rev(levels(x))) 

나는 실행하고있는 경우 : 나는 동일한 수준이없는 요소를 코딩 할 때

> levels(x) 
[1] "1" "2" "3" "4" "5" "6" "7" 
> levels(y) 
[1] "7" "6" "5" "4" "3" "2" "1" 

문제가 시작됩니다. 어떤 요인 z가 수준이 c("1", "3", "4", "6", "7")이라면 factor 함수를 활용하여 1 = 7, 2 = 6, 3 = 5 등의 수준을 "역전"할 수있는 기회가 있습니까?

다른 효율적인 레코딩 기능으로 충분합니다.

답변

7

당신은 인수 분해하는 levels 인수를 제공해야합니다

set.seed(2342472) 
(x <- round(runif(10,1,7))) 
# [1] 7 5 5 3 1 2 5 3 3 2 
(xf <- as.factor(x)) 
# [1] 7 5 5 3 1 2 5 3 3 2 
# Levels: 1 2 3 5 7 
(yf <- factor(x,levels=7:1)) 
# [1] 7 5 5 3 1 2 5 3 3 2 
# Levels: 7 6 5 4 3 2 1 

기존 요소도

(yxf <- factor(xf,levels=7:1)) 
# [1] 7 5 5 3 1 2 5 3 3 2 
#Levels: 7 6 5 4 3 2 1 
을에이 작업을 수행 할 수

마찬가지로 레벨도 원하는대로 확장되었습니다.

+0

감사합니다. 나는 너무 피곤해서 분명하지 않은 것 같다. 솔루션은 매우 간단했습니다 ... 다시 한 번 감사드립니다! – aL3xa

+0

+1 감사합니다. 이것은 나에게 비슷한 문제를 해결했다. –

3

예, 단지 levels에 할당 : (더크가 쓴)

R> set.seed(100) 
R> x <- as.factor(round(runif(100,1,7))) 
R> table(x) 
x 
1 2 3 4 5 6 7 
3 16 20 19 18 17 7 
R> levels(x) <- LETTERS[1:7] 
R> table(x) 
x 
A B C D E F G 
3 16 20 19 18 17 7 
R> 
+0

내 질문에 간결하지 않은 것 같습니다. '불완전'수준이있는 경우 (예 : 그것을 뒤집어서 c ("2", "4", "5", "6") 나는 c ("6", "5", "4", "2")를 얻을 것이다. 하기 위해서. 나는 값/레벨을 1 = 7, 2 = 6, 3 = 5로 바꾸고 싶습니다. 그 요소/수준 함수와 posible, 또는 내가 사용해야합니까 자동차 : : recode() ?? – aL3xa

2

당신이 갈 수 있어요 요인 수준을 완료하는 경우 :이 경우

df <- data.frame(x=factor(c(2,4,5,6))) 
df$x <- factor(df$x, levels = 7:1) 
table(df$x) 

7 6 5 4 3 2 1 
0 1 1 1 0 1 0 
1

을, 당신이 번호를 가지고 있기 때문에, 왜 단지 모듈러 산술을 사용하여 숫자를 변환하지? 더 큰 범위를 사용하는 경우

예는

levels(x) <- as.character((6*as.numeric(levels(x)))%%7+1) 

는도 6 및도 7에 적절한 수정.

+0

%%는 무엇을합니까? – Farrel

+0

C/Java 등에서 %와 비슷한 모듈러스 연산자 (나머지)입니다. 음수 값은 다르게 취급됩니다. – James

+0

흥미 롭 ... 나는 그것에게 시험을 줄 것이다! – aL3xa