Есть ли способ рассчитать процент NA в каждом столбце кадра данных, но с разделением df на отдельные группы? - PullRequest
0 голосов
/ 18 февраля 2019

Я ищу, чтобы определить соотношение пропущенных значений в каждом столбце кадра данных, разделенное на отдельные группы в этом кадре данных.

Я довольно новичок в R, поэтому до сих пор не добился большого успеха.Вот пример набора данных для его проверки:

df <- data.frame(
  programme = c('A','B','B','A','B','C','C','C','C','A'),
  v1 = c(24,NA,NA,45,NA,23,22,23,45,23),
  v2 = c(NA,1,1,NA,0,1,1,1,1,NA),
  v3 = c(2,3,2,3,2,NA,NA,NA,NA,2))

Я думал о разбиении кадра данных по группам, а затем о применении функции для каждого столбца, но, похоже, это не сработало

per_missing <- data.frame()
df %>%
  group_by(programme)
  per_missing <- apply(df, 2, function(col)sum(is.na(col))/length(col))

В идеале эта информация должна быть записана в новый фрейм данных, где значения коэффициента пропущенности каждого столбца указаны для каждой группы.И выглядело примерно так:

res <- data.frame(
  variables = c('v1','v2','v3'),
  A = c(0.0, 1, 0.0),
  B = c(1, 0.0, 0.0),
  C = c(0.0, 0.0, 1)
)

  variables A B C
1        v1 0 1 0
2        v2 1 0 0
3        v3 0 0 1


Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 18 февраля 2019

Сгруппированные по «программе», получают mean элементов NA в других столбцах, gather в «длинный» формат и spread обратно в «широкий» формат

library(tidyverse)
df %>% 
  group_by(programme) %>%
  summarise_all(funs(mean(is.na(.)))) %>% 
  gather(variables, val, -programme) %>% 
  spread(programme, val)
# A tibble: 3 x 4
#   variables     A     B     C
#   <chr>     <int> <int> <int>
#1 v1            0     1     0
#2 v2            1     0     0
#3 v3            0     0     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...