SORU
10 AĞUSTOS 2010, Salı


R faktörleri: bir sıkıntı daha fazla?

R temel veri türlerinden biri faktörlerdir. Benim durumumda faktörler temelde bir ağrı var ve hiç kullanmam. Ben her zaman karakterleri dönüştürmek. Ben bir şey eksik gibi tuhaf hissediyorum.

Faktör veri türü gerekli olduğu gruplama değişkenleri gibi faktörler kullanan fonksiyonların bazı önemli örnekler var mı? Ben ne zaman özel durumlar vardırgerekirfaktörler kullanıyor?

CEVAP
10 AĞUSTOS 2010, Salı


Faktörler kullanmalısınız. Evet bunlar acı, ama benim teorime göre bu neden onlar acı çünkü read.table read.csv bağımsız değişken stringsAsFactors = TRUE varsayılan (ve kullanıcıların çoğu Bayan bu incelik). Model uydurma paketleri lme4 kullanımı gibi faktörler ve farklı uygun modeller için faktörler emretti ve tezat türünü belirlemek için yararlıdır derim. Ve grafik paketleri de grup için bunları kullanın. ggplot ve en model uydurma fonksiyonları faktörler karakter vektörler zorlamak, sonuç aynı. Ancak, kodunuzu uyarıları ile bitirmek:

> lm(Petal.Length ~ -1   Species, data=iris)

Call:
lm(formula = Petal.Length ~ -1   Species, data = iris)

Coefficients:
    Speciessetosa  Speciesversicolor   Speciesvirginica  
            1.462              4.260              5.552  

> iris.alt <- iris
> iris.alt$Species <- as.character(iris.alt$Species)
> lm(Petal.Length ~ -1   Species, data=iris.alt)

Call:
lm(formula = Petal.Length ~ -1   Species, data = iris.alt)

Coefficients:
    Speciessetosa  Speciesversicolor   Speciesvirginica  
            1.462              4.260              5.552  

Warning message:
In model.matrix.default(mt, mf, contrasts) :
  variable 'Species' converted to a factor
> 

Bir püf nokta ** 10 her şey tamamdı. Vektörler bu iyi bir veri değil bu faktörlerin seviyeleri kaldırmak için çalışır. Örneğin:

> s <- iris$Species
> s[s == 'setosa', drop=TRUE]
 [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
Levels: setosa
> s[s == 'setosa', drop=FALSE]
 [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
> 

Ancak, dataframes ile [.data.frame() davranış farklıdır: this email ?[.data.frame (StackOverflow kaçmama izin vermeyecek olan backticks,). Dataframes drop=TRUE kullanarak hayal ettiğiniz gibi çalışmıyor:

> x <- subset(iris, Species == 'setosa', drop=TRUE)  # susbetting with [ behaves the same way
> x$Species
 [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
> 

Faktörler kolayca bırakabilirsiniz neyse ki:

> x <- subset(iris, Species == 'setosa', drop=TRUE)
> levels(x$Species)
[1] "setosa"     "versicolor" "virginica" 
> x$Species <- factor(x$Species)
> levels(x$Species)
[1] "setosa"

ya da:

> x$Species <- x$Species[drop=TRUE]
> levels(x$Species)
[1] "setosa"

Bu ggplot efsaneleri girmesini seçili sende seviyesini düşük tutmak için nasıl.

DAHİLİ olarak, faktörler nitelik düzeyi ile açalım temiz olan karakter vektör (attributes(iris$Species) class(attributes(iris$Species)$levels)). Eğer düzey bir isim (ve karakter dizeleri kullandığınız) değiştirmek için olsaydı, bu olurduçokdaha az verimli çalışma. Ve düzey isimler çok, özellikle ggplot efsaneleri için değiştiriyorum. Karakter vektörler faktörleri sahte, sadece bir unsur değiştirmek, ve yanlışlıkla ayrı yeni bir düzeyi oluşturacaksınız risk vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • mobilenet.cz

    mobilenet.cz

    26 NİSAN 2008
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009