Ich habe einen Datensatz in die eine Teilmenge von Messungen für jeden Eintrag zufällig fehlen:Beschleunigung Zählung von paarweise Beobachtungen in R
dat <- matrix(runif(100), nrow=10)
rownames(dat) <- letters[1:10]
colnames(dat) <- paste("time", 1:10)
dat[sample(100, 25)] <- NA
Ich bin interessiert Korrelationen zwischen jeder Zeile in diesem Datensatz (dh aa Berechnung , ab, ac, ad, ...). Allerdings möchte ich Korrelationen ausschließen, bei denen es weniger als 5 paarweise nicht-NA-Beobachtungen gibt, indem deren Wert auf NA in der resultierenden Korrelationsmatrix gesetzt wird.
Zur Zeit mache ich das wie folgt:
cor <- cor(t(dat), use = 'pairwise.complete.obs')
names <- rownames(dat)
filter <- sapply(names, function(x1) sapply(names, function(x2)
sum(!is.na(dat[x1,]) & !is.na(dat[x2,])) < 5))
cor[filter] <- NA
jedoch dieser Vorgang sehr langsam ist als der tatsächliche Datensatz enthält> 1.000 Einträge.
Gibt es eine Möglichkeit, Zellen basierend auf der Anzahl der nicht-NA-paarweisen Beobachtungen in einer vektorisierten Weise zu filtern, anstatt in verschachtelten Schleifen?