Question

Comment puis-je calculer la somme du nombre de cas de deux colonnes?

Avec c égale à:

      a  b
[1,] NA NA
[2,]  1  1
[3,]  1  1
[4,] NA  1

L'application de quelque chose comme

rollapply(c, 2, function(x) sum(complete.cases(x)),fill=NA)

Je voudrais revenir un numéro unique, 2 dans ce cas.Ce sera pour un grand ensemble de données avec de nombreuses colonnes, donc je voudrais l'utiliser rollapply à travers l'ensemble au lieu de simplement faire sum(complete.cases(a,b)).

Suis-je sur la pensée d'elle?

Merci!

Était-ce utile?

La solution

Vous pouvez calculer le nombre de cas dans les pays voisins de la matrice de colonnes à l'aide de rollapply comme ceci:

m <- matrix(c(NA,1,1,NA,1,1,1,1),ncol=4)
#     [,1] [,2] [,3] [,4]
#[1,]   NA    1    1    1
#[2,]    1   NA    1    1

library(zoo)

rowSums(rollapply(is.na(t(m)), 2, function(x) !any(x)))
#[1] 0 1 2

Autres conseils

Avez-vous essayé sum(complete.cases(x))?!

set.seed(123)
x <- matrix( sample( c(NA,1:5) , 15 , TRUE ) , 5 )
#     [,1] [,2] [,3]
#[1,]    1   NA    5
#[2,]    4    3    2
#[3,]    2    5    4
#[4,]    5    3    3
#[5,]    5    2   NA


sum(complete.cases(x))
#[1] 3

Pour trouver l' complete.cases() les deux premières colonnes:

sum(complete.cases(x[,1:2]))
#[1] 4

Et pour apply à deux colonnes d'un matrix sur l'ensemble de la matrice que vous pourriez faire ceci:

#  Bigger data for example
set.seed(123)
x <- matrix( sample( c(NA,1:5) , 50 , TRUE ) , 5 )
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    1   NA    5    5    5    4    5    2   NA    NA
#[2,]    4    3    2    1    4    3    5    4    2     1
#[3,]    2    5    4   NA    3    3    4    1    2     2
#[4,]    5    3    3    1    5    1    4    1    2     1
#[5,]    5    2   NA    5    3   NA   NA    1   NA     5

# Column indices
id <- seq( 1 , ncol(x) , by = 2 )
[1] 1 3 5 7 9
apply( cbind(id,id+1) , 1 , function(i) sum(complete.cases(x[,c(i)])) )
[1] 4 3 4 4 3

complete.cases() travaux de la ligne sage dans l'ensemble de data.frame ou matrix de retour TRUE pour ces lignes qui ne sont pas en manque des données.Un mineur de côté, "c" est un mauvais nom de variable, car c() est l'une des fonctions les plus couramment utilisées.

Cette shoudl de travail pour les deux matrix et data.frame

> sum(apply(c, 1, function(x)all(!is.na(x))))

[1] 2

et vous pouvez simplement parcourir de grandes matrice M

for (i in 1:(ncol(M)-1) ){
    c <- M[,c(i,i+1]
    agreement <- sum(apply(c, 1, function(x)all(!is.na(x))))
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top