Подсчет количества не-значений NA для каждого столбца в кадре данных - PullRequest
0 голосов
/ 15 мая 2018

У меня большой набор данных, который содержит много NA с и некоторые значения, отличные от Na. В данный момент я подсчитываю свои не NA значения для каждого столбца следующим образом:

 attach(df)
 1000 - (sum(is.na(X1)))
 1000 - (sum(is.na(X2)))
 1000 - (sum(is.na(X3)))
 1000 - (sum(is.na(X4)))
 1000 - (sum(is.na(X5)))
 ...
 detach(df)

Итак, моя общая длина моих наблюдений - сумма моих NA значений.

Есть ли более быстрый способ, который использует меньше строк кода и усилий при наборе текста и дает мне быстрый обзор всех столбцов и чисел, отличных от NA значений?

Как цикл for или что-то?

Я ищу что-то вроде этого:

  X1     Amount of Non-Na-Values
  X2     ...
  X3     ...
  X4
  X5
  X6  

Спасибо:)

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

С dplyr это будет:

library(dplyr)

df %>%
summarise_all(funs(sum(!is.na(.)))

Преимущество этого подхода в том, что вы можете использовать group_by раньше и вам не нужно заботиться об именах столбцов (он просто суммирует их все).

0 голосов
/ 15 мая 2018

Вы также можете вызвать is.na для всего фрейма данных (неявное приведение к логической матрице) и вызвать colSums для инвертированного ответа:

# make sample data
set.seed(47)
df <- as.data.frame(matrix(sample(c(0:1, NA), 100*5, TRUE), 100))

str(df)
#> 'data.frame':    100 obs. of  5 variables:
#>  $ V1: int  NA 1 NA NA 1 NA 1 1 1 NA ...
#>  $ V2: int  NA NA NA 1 NA 1 0 1 0 NA ...
#>  $ V3: int  1 1 0 1 1 NA NA 1 NA NA ...
#>  $ V4: int  NA 0 NA 0 0 NA 1 1 NA NA ...
#>  $ V5: int  NA NA NA 0 0 0 0 0 NA NA ...

colSums(!is.na(df))
#> V1 V2 V3 V4 V5 
#> 69 55 62 60 70
0 голосов
/ 15 мая 2018

Попробуйте это:

nonNA_counts <- sapply(df, function(x) sum(!is.na(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...