R의 요인을 다루는 것은 매우 특이한 일입니다. 저는 인정해야합니다 ... 요인 수준을 재정렬하는 동안 기본 숫자 값을 재정렬하는 것은 아닙니다. 다음은 약간의 데모입니다.
> numbers = 1:4
> letters = factor(letters[1:4])
> dtf <- data.frame(numbers, letters)
> dtf
numbers letters
1 1 a
2 2 b
3 3 c
4 4 d
> sapply(dtf, class)
numbers letters
"integer" "factor"
이제이 인수를 숫자로 변환하면 다음을 얻을 수 있습니다.
# return underlying numerical values
1> with(dtf, as.numeric(letters))
[1] 1 2 3 4
# change levels
1> levels(dtf$letters) <- letters[4:1]
1> dtf
numbers letters
1 1 d
2 2 c
3 3 b
4 4 a
# return numerical values once again
1> with(dtf, as.numeric(letters))
[1] 1 2 3 4
보시다시피 ... 레벨을 변경하면 수치가 아닌 레벨 만 변경됩니다 (누가 말할까요?). 그러나 factor
@Jonathan Chang이 제안한대로 함수 를 사용하면 다른 일이 발생합니다. 숫자 값을 직접 변경합니다.
다시 한 번 오류가 발생 levels
하고 있습니다 factor
. 하지마 !!! 마십시오 하지 사용 levels
또는 당신이 엉망 일을거야 (당신은 당신이 무엇인지 정확히 모르는 경우).
한 가지 제안 : R의 객체와 동일한 이름으로 객체의 이름을 지정하지 마십시오 ( df
F 분포의 밀도 함수, letters
소문자 알파벳 문자 제공). 이 특별한 경우에, 당신의 코드는 결함이 없을 것입니다. 그러나 때때로 그것은 ... 그러나 이것은 혼란을 야기 할 수 있습니다. 그리고 우리는 그것을 원하지 않습니다, 그렇죠?!? =)
대신 다음과 같이 사용하십시오 (처음부터 다시 시작하겠습니다).
> dtf <- data.frame(f = 1:4, g = factor(letters[1:4]))
> dtf
f g
1 1 a
2 2 b
3 3 c
4 4 d
> with(dtf, as.numeric(g))
[1] 1 2 3 4
> dtf$g <- factor(dtf$g, levels = letters[4:1])
> dtf
f g
1 1 a
2 2 b
3 3 c
4 4 d
> with(dtf, as.numeric(g))
[1] 4 3 2 1
대신 및을 사용 data.frame
하여 이름을 지정할 수도 있으며 결과는 정상입니다. 사실이 코드는 귀하가 게시 한 것과 동일하며 이름 만 변경됩니다. 이 부분 은 오류를 발생시키지 않지만 혼란 스러울 수 있습니다!df
letters
g
factor(dtf$letter, levels = letters[4:1])
?factor
설명서를 철저히 읽으십시오 ! factor(g, levels = letters[4:1])
과 의 차이점은 무엇입니까 factor(g, labels = letters[4:1])
? 유사한에서 무엇 levels(g) <- letters[4:1]
과 g <- factor(g, labels = letters[4:1])
?
ggplot 구문을 입력 할 수 있으므로 이에 대해 더 많은 도움을 드릴 수 있습니다!
건배!!!
편집하다:
ggplot2
실제로 수준과 값을 모두 변경해야합니까? 흠 .. 이거 파낼 게요 ...