#r #tidyverse
#r #tidyverse
Вопрос:
mtcars %>%
select(everything()) %>% # replace to your needs
summarise_all(funs(sum(is.na(.))))
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> 1 0 0 0 0 0 0 0 0 0 0 0
У меня есть приведенный выше код, который подсчитывает значения NA в каждом столбце.
Я хочу транспонировать фрейм данных, чтобы получить такой результат:
col_name| na_count
-------- ---------
mpg| 0
cyl| 0
disp| 0
hp| 0
...| ...
carb| 0
Как я могу это сделать в синтаксисе R tidyverse?
Ответ №1:
Нам просто нужно pivot_longer
вкл everything()
. Кроме того, этот select
шаг не требуется, если мы выбираем все столбцы. В новой версии dplyr
, т.е. >= 1.0.0
Вместо summarise_all
, summarise_at
etc, мы можем использовать summarise
с across
library(dplyr)
library(tidyr)
mtcars %>%
summarise(across(everything(), ~ sum(is.na(.)))) %>%
pivot_longer(cols = everything(), names_to = 'col_name', values_to = 'na_count')
В base R
, это может быть более компактным
stack(colSums(is.na(mtcars)))[2:1]
Ответ №2:
Это также можно сделать в tidyverse с помощью gather, поскольку вы хотите перенести столбцы в строки.
mtcars %>%
gather(key = col_name, value= col_values) %>%
group_by(col_name) %>%
summarise(na_count = sum(is.na(.)))
Должно дать:
# A tibble: 11 x 2
col_name na_count
<chr> <int>
1 am 0
2 carb 0
3 cyl 0
4 disp 0
5 drat 0
6 gear 0
7 hp 0
8 mpg 0
9 qsec 0
10 vs 0
11 wt 0