Ich habe eine einfache Datenrahmen:R: zurück NA trotz is.na
> df <- data.frame(i=c(1:20), x=c(1:10, rep(NA, 10)))
> df
i x
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 NA
12 12 NA
13 13 NA
14 14 NA
15 15 NA
16 16 NA
17 17 NA
18 18 NA
19 19 NA
20 20 NA
Ich möchte die rownames der nicht NA Teile extrahieren, die ich tun kann, wie folgt:
> rownames(df[c(1:20),][!is.na(df$x),])
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
So weit so gut. Jetzt möchte ich die erste Zeile überspringen, aber aus irgendeinem Grund gibt der Befehl die gleiche Ausgabe zurück und enthält jetzt sogar eine NA-Zelle.
> rownames(df[c(2:20),][!is.na(df$x),])
[1] "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
Es macht keinen Sinn, einen Vektor gleicher Größe und sogar einen mit der angeblich ausgeschlossenen Zeile zu erhalten. Wie Sie im obigen Datenrahmen sehen können, ist df $ x [11] definitiv NA, also warum schließt es etwas ein, das! Is.na() normalerweise loswerden sollte? Um genauer zu sein: Ich versuche, einen Auszug eines Datenrahmens zu beobachten, aber Zeilen auszuschließen, die NAs enthalten. Ich würde mich über jeden Ratschlag freuen!
in Bezug auf Ihren Code, vergessen Sie einfach zu filtern jedes Mal 'df' erscheint. Um es zum Laufen zu bringen, kannst du rownames machen (df [2:20,] [! Is.na (df [2:20,] $ x),]) 'oder' rownames (df [-1,] [! is.na (df [-1,] $ x),]) ' –
Danke, das funktioniert eigentlich komplett mit meinem pupose. Ich habe tatsächlich vergessen, df im zweiten Teil zu spezifizieren/zu filtern! – oepix
Der Grund dafür ist, dass es die rownames für die Datentabelle df [c (2:20),] die von 2 bis 20 sind (siehe rownames (df [c (2:20),]) und dann die die ersten 10 Werte von denen, die die "11" enthalten. Als Oberst erwähnte Rownames (df [c (2:20),] [! is.na (df [c (2:20),] $ x),]) funktioniert auch –