Contando não NAs em um quadro de dados;obtendo resposta como um vetor

StackOverflow https://stackoverflow.com/questions/4986101

  •  13-11-2019
  •  | 
  •  

Pergunta

Digamos que eu tenha o seguinte R quadro de dados ZZZ:

( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )

## not run
   n  m o
1  1  6 7
2  2 NA 8
3 NA NA 8

Quero saber, em forma de vetor, quantos não-NAs eu tenho.Quero que a resposta esteja disponível para mim como:

2, 1, 3

Quando eu uso o comando length(ZZZ), Eu recebo 3, que obviamente é o número de vetores no quadro de dados, uma informação valiosa o suficiente.

Eu tenho outras funções que operam neste quadro de dados e me dê respostas na forma de vetores, mas, caramba, o comprimento não funciona assim.

Foi útil?

Solução

Experimente isto:

# define "demo" dataset
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8))
# apply the counting function per columns
apply(ZZZ, 2, function(x) length(which(!is.na(x))))

Tendo executado:

> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o 
2 1 3 

Se você realmente insiste em retornar um vetor, você pode usar as.vector, por exemplo.definindo esta função:

nonNAs <- function(x) {
    as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
    }

Você poderia simplesmente correr nonNAs(ZZZ):

> nonNAs(ZZZ)
[1] 2 1 3

Outras dicas

colSums(!is.na(x))

Vetorização ftw.

Para obter o número total de valores ausentes, use sum(is.na(x)) e para colunas, use colSums(is.na(x)) onde x é uma variável que contém o conjunto de dados

Se você deseja apenas a soma total dos NAs gerais, então sum() com !is.na() fará isso:

ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top