2017-06-02 4 views
-2

entspricht, einen NA-Wert zuweisen Ich versuche, jeder Zeile in meiner b-Spalte, die NA in meiner a-Spalte entspricht, einen NA-Wert zuzuweisen. Die Spalten befinden sich in einem Datenrahmen df.r, jeder Zeile in meiner b-Spalte, die NA in meiner a-Spalte

Aber wenn ich den folgenden Code mache, bekommt alle meine Spalte NA.

Was soll ich ändern?

for(i in 1:nrow(df)) 
{ 
    row <- df[i,] 
    is.na(df$`a`) <- (df$b <- NA) 
} 
+2

Mögliche Duplikat von [Warum ändert is.na() das Argument?] (https://stackoverflow.com/questions/42107628/why-does-isna-change-its-argument) – Axeman

Antwort

1

Dazu können wir nutzen OFTHE vektorisiert Möglichkeit Gebrauch zu machen, indem eine logische vector (is.na(df$a)) erstellen, diese verwenden, um die Elemente von 'b' der Teilmenge und weisen es NA

df$b[is.na(df$a)] <- NA 

Wenn wir data.table verwenden, kann dies zugewiesen werden (:=) an Ort und Stelle

library(data.table) 
setDT(df)[is.na(a), b := NA] 
0

Gemäß der Dokumentation ?is.na, is.na<- ist eine generische Funktion, die Elemente auf NA setzt. Für die rechte Seite von is.na(x) <- value, value muss ein geeigneter Indexvektor zur Verwendung mit x sein.

Beispiele:

df <- data.frame(a = LETTERS[1:5], b = 1:5) 
is.na(df$b) <- c(2, 4) 
df 
# a b 
#1 A 1 
#2 B NA 
#3 C 3 
#4 D NA 
#5 E 5 

So haben die 2. und 4. Elemente des Vektors df$b-NA eingestellt.

Nun, wenn die entsprechenden Elemente der df$a sollte auch auf NA eingestellt werden, können wir verwenden:

is.na(df$a) <- is.na(df$b) 
df 
#  a b 
#1 A 1 
#2 <NA> NA 
#3 C 3 
#4 <NA> NA 
#5 E 5 

NB: Ich habe über diese Funktion von Antworten und Kommentare gelernt auf Why does is.na() change its argument?

Verwandte Themen