Czy istnieje sposób użycia summarise_each()
do policzenia liczby rekordów w ramce danych, ale zignorowania NA
s?r - używanie funkcji podsumowania_each() do zliczania rekordów ignorujących NA
example/Dane Przykładowe
df_sample <- structure(list(var_1 = c(NA, NA, NA, NA, 1, NA), var_2 = c(NA,
NA, NA, NA, 2, 1), var_3 = c(NA, NA, NA, NA, 3, 2), var_4 = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), var_5 = c(NA,
NA, NA, NA, 4, 3)), .Names = c("var_1", "var_2", "var_3", "var_4",
"var_5"), row.names = 5:10, class = "data.frame")
> df_samp
var_1 var_2 var_3 var_4 var_5
5 NA NA NA NA NA
6 NA NA NA NA NA
7 NA NA NA NA NA
8 NA NA NA NA NA
9 1 2 3 NA 4
10 NA 1 2 NA 3
Korzystanie summarise_each()
i n()
liczy wszystkie rekordy:
library(dplyr)
df_samp %>%
summarise_each(funs(n()))
## result:
var_1 var_2 var_3 var_4 var_5
1 6 6 6 6 6
wiem, że n()
nie przyjmuje argumentów, zatem istnieje inny sposób mogę użyj w ciągu summarise_each()
, które zignoruje NA
s przy zliczaniu liczby rekordów i zwróci zero, jeśli zmienna jest równa l NA
?
pożądanego rezultatu
var_1 var_2 var_3 var_4 var_5
1 1 2 2 0 2
Poniższa metoda pobiera mnie część drogi tam, ale chciałbym również zwrócić 0 dla var_4
:
df_samp %>%
melt %>%
filter(!is.na(value)) %>%
group_by(variable) %>%
summarise(records = n())
## result:
variable records
1 var_1 1
2 var_2 2
3 var_3 2
4 var_5 2
Non-'dplyr' sposób może być 'colSums (! Is.na (df_sample))'. – Henrik