2015-11-18 16 views
5

verir. Ortak bir x değeri olmadığından, kümelemenin yalnızca NA'yı bir grup olarak kabul edilen orijinal data.frame'i geri vermesini beklerim. Ama toplama bana aşağıdaki sonuçları veriyor.Agrega beklenmedik bir cevap bir örnek olarak, aşağıdaki data.frame kullanmak

>aggregate(y ~ x, data=d, FUN=sum) 
    x y 
1 1 2 

Ben na.action varsayılan eylemleri değiştirme hakkında belgelerine okudum, ama bana anlamlı bir şey vermek görünmüyor.

>aggregate(y ~ x, data=d, FUN=sum, na.action=na.pass) 
    x y 
1 1 2 

Neler oluyor? Bu durumda na.pass'in ne yaptığını anlamıyorum. R'de istediğimi gerçekleştirmek için bir seçenek var mı? Herhangi bir yardım büyük takdir edilecektir.

+2

Gruplama değişkeni olarak bir "NA" değerini düşündüğünüzü söylüyorsunuz? NA'yı istiyor musun, istemiyor musun? (Net değil çünkü aynı zamanda testinizin bir parçası olarak 'na.rm = TRUE' kullanıyorsunuz .... – A5C1D2H2I1M1N2O1R2T1

+0

Evet, NA'yı grup olarak istiyorum – Sanias

+0

Dokümantasyonda" Eksik değerlere sahip satırlar "yazıyor. değişkenler sonuçtan çıkarılacaktır. "Eğer bunu istemiyorsanız," by "değişkeninizi yeniden kaydetmeniz veya toplama için farklı bir işlev kullanmanız gerekir. – Roland

cevap

7

aggregate, tapply'dan yararlanır, bu da gruplama değişkeninde factor'u kullanır.

Ama factor içinde NA değerlerle ne olur bakmak:

factor(c(1, 2, NA)) 
# [1] 1 2 <NA> 
# Levels: 1 2 

Not levels. Sen NA tutmak için addNA yararlanabilirler:

d$x <- addNA(factor(d$x)) 
str(d) 
# 'data.frame': 2 obs. of 2 variables: 
# $ x: Factor w/ 2 levels "1",NA: 1 2 
# $ y: num 2 3 
aggregate(y ~ x, d, sum) 
#  x y 
# 1 1 2 
# 2 <NA> 3 

: gibi

aggregate(y ~ addNA(x), d, sum) 
# addNA(x) y 
# 1  1 2 
# 2  <NA> 3 

Ya bir şey: Böylece

addNA(factor(c(1, 2, NA))) 
# [1] 1 2 <NA> 
# Levels: 1 2 <NA> 

, muhtemelen böyle bir şey yapmak gerekir (Alternatif olarak, yalnızca "daha hızlı" olmayacak "data.table" gibi bir şeye yükseltme yapın. n aggregate, ancak NA değerleri ile size daha tutarlı davranışlar sağlayacaktır. using the formula method of aggregate or not olup olmadığına dikkat etmenize gerek yok.)

library(data.table) 
as.data.table(d)[, sum(y), by = x] 
#  x V1 
# 1: 1 2 
# 2: NA 3 
+0

Teşekkürler, takdir ediyorum. Belgeleme, belgenin "nesneyi değiştirmeden döndürdüğünü" söyler. Öyleyse neden NA'nın görünüşü kaldırılıyor? – Sanias

+0

@Sanias, yani "by" sütunları değil, toplanan sütunlara referansta bulunuyor. – A5C1D2H2I1M1N2O1R2T1

İlgili konular