2014-09-24 15 views
6

Daha sonra xtable ile yazdırdığım bir data.frame oluşturmak için bazı dplyr sihrini bir işlevin içine sarmaya çalışıyorum.dplyr summarise_each() öğesini is.na() ile kullanma

nihai amaç Peşinde (bu bir işlev içinde olduğundan) Sonra çözümlenen tüm sütunları almak için kullanabileceğiniz regroup() ile subsetting çok faydalı summarise_each() fonksiyonu geldi this bir dplyr sürümünü çalışan ve etrafında okuma sahip olmaktır .

Karşılaştığım sorun (şu ana kadar) is.na() numaralı telefonu arayarak, numaralı telefondan Error: expecting a single value bildirildi.

ben henüz benim iĢlevini kasıtlı değil değilim ama minimal bir örneği (NB - Bu benim regroup() ile değiştirebiliyor benim işlevinde iken group_by() kullanır) izler ...

library(dplyr) 
library(magrittr) 
> t <- data.frame(grp = rbinom(10, 1, 0.5), 
       a = as.factor(round(rnorm(10))), 
       b = rnorm(10), 
       c = rnorm(10)) 
t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(is.na)) 
Error: expecting a single value 

Bu başarısız Koşu ve sorunun is.na() da olsa çağrı yerine de gözlem sayısını dışarı çalışıyorsanız bu yana her ... çalıştığını (eksik oranını elde etmek için gerekli)

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(length)) 
Source: local data frame [2 x 4] 

    grp a b c 
1 0 8 8 8 
2 1 2 2 2 

asıl sorun olsa her sütun içinde sadece is.na() gerekmez, ama bu yüzden gerçekten ne istiyorsunuz bağlantılı örnek uyarınca sum(is.na()) ...

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(propmiss = sum(is.na)/length)) 

olduğunu Ama sorun olduğunu sum(is.na) doesn olduğunu (benim beklenti yanlış olduğu için muhtemel!) 't işlevi beklediğim gibi çalışmıyor ...

> t %>% 
group_by(grp) %>% ## This is replaced with regroup() in my function 
summarise_each(funs(nmiss = sum(is.na))) 
Error in sum(.Primitive("is.na")) : invalid 'type' (builtin) of argument 

açıkça parantez ile is.na() arama çalıştı ama bu da bir hata döndürür ...

> t %>% 
+ group_by(grp) %>% ## This is replaced with regroup() in my function 
+ summarise_each(funs(nmiss  = sum(is.na()))) 
Error in is.na() : 0 arguments passed to 'is.na' which requires 1 

Dokümantasyon ile ilgili herhangi bir öneri veya işaretçi çok minnettar olacaktır.

sayesinde slackline

+0

1 Bunun için –

cevap

8

İşte bazı NA seti küçük verilerle test bir olasılık verilmiştir:

df <- data.frame(a = rep(1:2, each = 3), 
       b = c(1, 1, NA, 1, NA, NA), 
       c = c(1, 1, 1, NA, NA, NA)) 

df 
# a b c 
# 1 1 1 1 
# 2 1 1 1 
# 3 1 NA 1 
# 4 2 1 NA 
# 5 2 NA NA 
# 6 2 NA NA 


df %>% 
    group_by(a) %>% 
    summarise_each(funs(sum(is.na(.))/length(.))) 
# a   b c 
# 1 1 0.3333333 0 
# 2 2 0.6666667 1 

Ve belgelere işaretçiler istedi çünkü: . her belirtmektedir Verilerin bir kısmı ve ?summarize_each sayılı belgede bazı Örnekleri'da kullanılmaktadır. ?funs?funs'un Arguments bölümünde "kukla parametre" olarak açıklanmıştır ve Örnekleri kullanılır. . da kısaca bölüm ?do arasında Tartışmalarına tarif edilir: müthiş bir simge için

+0

Mükemmel, teşekkürler "Geçerli gruptan bahsedilirken . kullanabilirsiniz ...". '' 'Ile karşılaştım, daha önce plyr() 'deki faktörlere dönüştürülmesi gereken değişkenleri belirtmek için kullanıldı ve bazı' dplyr() 'örneklerinde kullanıldığını gördüm.Kafa karıştırıcı bulduğum (şimdi akılda tutulacak) şey, birçok komutun, mevcut gruba başvurmak için kullanmak zorunda kalmadan çalıştığı ve hangisinin buna ihtiyaç duyduğu/gerekmediği her zaman açık olmadığıdır. Her neyse, bu üzerinde çalıştığım işlev içinde harika çalışıyor, tekrar teşekkürler. – slackline