ich eine Textdatei-Datensatz, die ich wie folgt lauten:zu viele NA-Werte in Datensatz für na.omit zu handhaben
cancer1 <- read.table("cancer.txt", stringsAsFactors = FALSE, quote='', header=TRUE,sep='\t')
ich dann die Klasse der konstituierenden Werte umwandeln müssen, damit ich durchführen kann mathematische Analysen zum df.
cancer<-apply(cancer1,2, as.numeric)
Dies führt> 9000 NA-Werte in eine "17980 X 598" df ein. Daher gibt es zu viele NA-Werte, um einfach "na.omit" zu verwenden, da alle Zeilen entfernt werden.
Daher ist mein Plan, jede NA in jeder Zeile durch den Mittelwert dieser Zeile zu ersetzen wie folgt, mein Versuch:
for(i in rownames(cancer)){
cancer2<-replace(cancer, is.na(cancer), mean(cancer[i,]))
}
jedoch entfernt diese jede Zeile wie na.omit:
dim(cancer2)
[1] 0 598
Kann mir jemand sagen, wie jeder der NA-Werte mit dem Mittelwert dieser Zeile ersetzen ?
Das sieht aus wie wird es funktionieren, aber es gibt ein paar Probleme . (1) Warum "rowMeans" in einer einzelnen Zeile verwenden? (2) warum für jeden fehlenden Wert getrennt berechnen? (3) Sie können fast sicher die innere Schleife vektorisieren, um Effizienz stark zu erhöhen ... –
@BenBolker Ich habe meine Antwort erheblich aktualisiert –