Frage

Wie kann ich die Anzahl der vollständigen Fälle zweier Spalten summieren?

Mit c gleich:

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

Etwas anwenden wie

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

Ich möchte eine einzelne Nummer zurückbekommen, 2 in diesem Fall.Dies gilt für einen großen Datensatz mit vielen Spalten, den ich daher gerne verwenden würde rollapply über das gesamte Set, anstatt es einfach zu tun sum(complete.cases(a,b)).

Denke ich darüber nach?

Danke!

War es hilfreich?

Lösung

Die Anzahl der vollständigen Fälle in benachbarten Matrixspalten können Sie mit berechnen rollapply so was:

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

Andere Tipps

Hast du versucht 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

Um das zu finden complete.cases() der ersten beiden Spalten:

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

Und dazu apply auf zwei Spalten von a matrix Über die gesamte Matrix hinweg könnten Sie Folgendes tun:

#  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() wirkt zeilenweise über das Ganze data.frame oder matrix zurückkehren TRUE für die Zeilen, in denen keine Daten fehlen.Eine kleine Ausnahme, "c" ist ein schlechter Variablenname, weil c() ist eine der am häufigsten verwendeten Funktionen.

Das sollte für beide funktionieren matrix Und data.frame

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

[1] 2

und Sie könnten einfach eine große Matrix durchlaufen 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))))
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top