Sto provando a racchiudere qualche magia dplyr all'interno di una funzione per produrre un data.frame che poi stampo con xtable.Uso di dplyr summarise_each() con is.na()
L'obiettivo finale è quello di avere una versione dplyr di this lavorare, e leggendo in giro ho trovato molto utile summarise_each()
funzione che dopo sottoinsiemi con regroup()
(dato che si tratta di una funzione) posso utilizzare per ottenere tutte le colonne analizzati .
Il problema che ho incontrato (finora) è con chiamando is.na()
dall'interno summarise_each(funs(is.na))
come mi è stato detto Error: expecting a single value
.
Sono volutamente non distacco mia funzione appena ancora, ma un esempio minimo segue (NB - Questo utilizza group_by()
mentre nella mia funzione sostituisco questo con regroup()
) ...
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
L'esecuzione di questo fallisce , e la sua la chiamata a is.na()
che è il problema dal momento che se io invece lavoro fuori il numero di osservazioni in ogni (necessario per ricavare la percentuale di mancante) funziona ...
> 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
Il vero problema è però che non ho bisogno solo is.na()
all'interno di ogni colonna, ma il sum(is.na())
come per l'esempio collegato così che cosa mi piacerebbe davvero è ...
> t %>%
group_by(grp) %>% ## This is replaced with regroup() in my function
summarise_each(funs(propmiss = sum(is.na)/length))
Ma il problema è che doesn sum(is.na)
't lavorare come mi aspetto che (probabilmente perché la mia aspettativa è sbagliato!) ...
> 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
ho provato a chiamare is.na()
esplicitamente con le staffe, ma anche quello restituisce un errore ...
> 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
Qualsiasi consiglio o suggerimento alla documentazione sarebbe molto ben accolto.
Grazie,
slackline
+1 per un'icona impressionante –