olmalıdır olamaz Halihazırda kabul edilen cevap sadece seviyelerinin etiketlerinin etiketlerinin sırasını değiştirir (yani, faktör seviyelerinin nasıl çağrıldığı).(Bunlar alfanümerik sırayla kodlanmış olmasıdır belirterek seviyeleri gerekli olmaz) faktörü haline
açın cyl
: seviyeleri ve etiket arasındaki farkı göstermek için, aşağıdaki örneği ele
mtcars2 <- mtcars %>% mutate(cyl = factor(cyl, levels = c(4, 6, 8)))
mtcars2$cyl[1:5]
#[1] 6 6 4 6 8
#Levels: 4 6 8
Değiştir seviyeleri sırası (ancak etiket kendisi: silindir hala aynı sütun)
mtcars3 <- mtcars2 %>% mutate(cyl = factor(cyl, levels = c(8, 6, 4)))
mtcars3$cyl[1:5]
#[1] 6 6 4 6 8
#Levels: 8 6 4
all(mtcars3$cyl==mtcars2$cyl)
#[1] TRUE
.210
atama yeni etiketler cyl
etiket sırası için oldu: C (8, 6, 4), aşağıdaki gibi, bu nedenle yeni etiketlerini belirten: bu sütun, ilk sütun nasıl farklı
mtcars4 <- mtcars3 %>% mutate(cyl = factor(cyl, labels = c("new_value_for_8",
"new_value_for_6",
"new_value_for_4")))
mtcars4$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_8 new_value_for_6 new_value_for_4
Not:
all(as.character(mtcars4$cyl)!=mtcars3$cyl)
#[1] TRUE
#Note: TRUE here indicates that all values are unequal because I used != instead of ==
#as.character() was required as the levels were numeric and thus not comparable to a character vector
Diğer ayrıntılar:
biz cyl
kullanmanın düzeylerini değiştirmek için olsaydı mtcars3
yerine, aynı sonucu elde etmek için etiketleri farklı şekilde belirtmemiz gerekir. mtcars2
için etiket sırası ise c (4, 6, 8) mtcars3$cyl
ve mtcars4$cyl
farklı
#change labels of mtcars2 (order used to be: c(4, 6, 8)
mtcars5 <- mtcars2 %>% mutate(cyl = factor(cyl, labels = c("new_value_for_4",
"new_value_for_6",
"new_value_for_8")))
, aşağıdaki gibi dolayısıyla etiket mtcars4$cyl
arasında ve mtcars5$cyl
böylece aynı olan, yeni etiketler belirtin bile seviyeleri düzeylerinin farklı bir sırası vardır.
mtcars4$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_8 new_value_for_6 new_value_for_4
mtcars5$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_4 new_value_for_6 new_value_for_8
all(mtcars4$cyl==mtcars5$cyl)
#[1] TRUE
levels(mtcars4$cyl) == levels(mtcars5$cyl)
#1] FALSE TRUE FALSE
Belki 'dat%>% (x = faktörü (x, etiketler = 'B'))' BTW, boru operatörü Yani kodunuzda – akrun
doğru değildir mutasyona ben (düzeylerini kullanamazsınız) mutasyonda mı? Değişkeni tekrar bir faktör olarak kodlamalı mıyım? Hmm ... (% <>% tamamlanmalı, borulara girmeli ve dat değerini atamalıdır) – user3393472
Evet, x'i değiştirmek istiyorum. Ben x (x) 'i mutasyona uğratmak istediğimi anlayabilmek için "level (x)" in yeterli olacağını düşündüm. Sanırım bu "tasarım" ile bu şekilde çalıştığı için bir tasarım seçimi. – user3393472