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
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.
3 veya daha fazla sayı için ortak katl...
Neredeyse sıralanmış bir dizi (k) elem...
Neden gıt gıt protokolü-http-arka uç d...
Doğrulama, bir veya daha fazla varlıkl...
Bir veya daha fazla türde bulunamıyor ...