R'deki faktörlerle uğraşmak oldukça tuhaf bir iş, itiraf etmeliyim ... Faktör seviyelerini yeniden sıralarken, altta yatan sayısal değerleri yeniden düzenlemiyorsunuz. İşte küçük bir gösteri:
> 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"
Şimdi, bu faktörü sayısal değere dönüştürürseniz, şunu elde edersiniz:
# 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
Gördüğünüz gibi ... seviyeleri değiştirerek, sayısal değerleri değil, yalnızca seviyeleri (kim söyler ki, eh?) Değiştirirsiniz! Ancak, factor@Jonathan Chang'ın önerdiği işlevi kullandığınızda , farklı bir şey olur: sayısal değerleri kendiniz değiştirirsiniz.
Bir kez daha hata alıyorsun çünkü yapıyorsun levelsve sonra onu yeniden seviyelendirmeye çalışıyorsun factor. Yapma !!! Do not kullanmak levelsveya işleri berbat olacak (ne yaptığınızı tam olarak bilmek sürece).
Bir lil 'öneri: nesnelerinizi R'nin nesneleri ile aynı isimle adlandırmaktan kaçının ( dfF dağılımı için yoğunluk fonksiyonudur, lettersküçük harfli alfabe harfleri verir). Bu özel durumda, kodunuz hatalı olmayacaktır, ancak bazen olabilir ... ama bu kafa karışıklığı yaratabilir ve biz bunu istemiyoruz, değil mi?!? =)
Bunun yerine, şuna benzer bir şey kullanın (bir kez daha baştan başlayacağım):
> 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
Ayrıca sizi adlandırabilir geldiğini hatırlatırız data.frameile dfve lettersyerine gve sonuç olumlu olacaktır. Aslında, bu kod gönderdiğiniz kodla aynıdır, sadece isimler değiştirilir. Bu kısımfactor(dtf$letter, levels = letters[4:1]) bir hata vermez, ancak kafa karıştırıcı olabilir!
?factorKılavuzu iyice okuyun ! Arasındaki fark nedir factor(g, levels = letters[4:1])ve factor(g, labels = letters[4:1])? Benzer ne var levels(g) <- letters[4:1]ve g <- factor(g, labels = letters[4:1])?
Ggplot sözdizimi koyabilirsiniz, böylece size bu konuda daha fazla yardımcı olabiliriz!
Alkış !!!
Düzenle:
ggplot2aslında hem seviyeleri hem de değerleri değiştirmeyi gerektiriyor mu? Hm ... Bunu çıkaracağım ...