2012-09-07 16 views
5

I haben mehrere ganzzahlige Spalten in einem Datenrahmen, die alle mit NAs, die ich 0.Umkodierung NAs in mehrere Datenrahmen Spalten

df1 <- as.data.frame(sapply(paste(sample(letters,50,T),sample(letters,10), sep=""), function(x) {sample(c(NA,0:5),10,T)})) 
df2 <- as.data.frame(sapply(paste(sample(letters,5,T),sample(letters,10,T), sep=""), function(x) {sample(letters[1:5],10,T)})) 
df <- cbind(df2,df1) 

eine Ausgabe wie folgt Producing ... (nur die ersten paar zum Umkodieren brauchen Spalten des gezeigten) 55

enter image description here

ich über Umkodierung die NAs auf 0 für jede Spalte manuell wie df$col[is.na(df$col)] <- 0 gehen kann, aber wenn man bedenkt, dass es so viele Spalten sind, wäre es eine Weile dauern, dass alle aus, um Typ .

Wie kann ich alle diese NAs zu 0 in einer Zeile oder drei recode?

(Ich weiß, ich könnte die ganze Zahl Spalten schmelzen und dann neu codieren, die eine geschmolzene Säule, aber ich würde lieber tun dies in der Basis R)

Antwort

11

Sie waren ganz in der Nähe:

df[is.na(df)] <- 0 
+0

Woah .... kann es nicht glauben, dass einfach war. Wie könnte ich dann einen Bereich von zu rekodierenden Spalten spezifizieren, anstatt alle? –

+1

Vergiss es, ich habe es. 'df [6:10] [ist.na (df [6:10])] <- 0'. Ich habe nicht einmal daran gedacht, zwei eckige Klammern hintereinander zu setzen. –

+0

@ TommyO'Dell, Kein Problem. Wie gesagt, du warst sehr nah dran! – A5C1D2H2I1M1N2O1R2T1

2

Verwendung plyr ‚s colwise Meta-Funktion macht dies einfach:

dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df) 
+1

obwohl @ Mrdwab Methode ist sicherlich kürzer zu schreiben. –

Verwandte Themen