2014-01-29 14 views
6

Ich habe derzeit ein Datenframe, in dem es mehrere Zeilen gibt, die ich in "NA" konvertieren möchte. Wenn ich diesen Datenrahmen zum ersten Mal von einer .csv importiert habe, könnte ich na.strings = c ("A", "B", "C) usw. verwenden, um die Werte zu entfernen, die ich nicht wollte.na.strings auf einen Datenrahmen angewendet

Ich möchte das gleiche noch einmal, aber diesmal mit einem Datenrahmen bereits, nicht einem anderen CSV-Import

um die Daten zu tun zu importieren, habe ich:

data<-read.csv("code.csv", header=T, strip.white=TRUE, stringsAsFactors=FALSE, na.strings=c("", "A", "B", "C")) 

Jetzt, mit „data“, mag ich Subset es beim Entfernen noch mehr spezifische Werte in den Zeilen .. Ich versuchte etwas wie:

data2<-data.frame(data, na.strings=c("D", "E", "F")) 

Natürlich funktioniert das nicht, weil ich denke, dass na.strings nur mit dem "read" -Paket funktioniert. Keine anderen Funktionen. Gibt es ein Äquivalent, um einfach bestimmte Werte in NA umzurechnen, so dass ich (Daten2) ziemlich leicht na?

Danke für Ihre Hilfe.

Antwort

1

Ordnen Sie die NA-Werte direkt zu.

z.B .:

x <- data.frame(a=1:5, b=letters[1:5]) 
# > x 
# a b 
# 1 1 a 
# 2 2 b 
# 3 3 c 
# 4 4 d 
# 5 5 e 

# convert the 'b' and 'd' in columb b to NA 
x$b[x$b %in% c('b', 'd')] <- NA 
# > x 
# a  b 
# 1 1 a 
# 2 2 <NA> 
# 3 3 c 
# 4 4 <NA> 
# 5 5 e 
+0

Vielen Dank für die Antworten jeder. Viele waren nützlich –

1

Da wir ich werde Ihre Daten nicht haben mtcars verwenden. Angenommen, wir Werte wollen überall setzen in mtcars, die gleich sind 4 oder 19,2 bis NA

ind <- which(mtcars == 4, arr.ind = TRUE) 
mtcars[ind] <- NA 

In Ihrer Einstellung, die Sie würde diese Zahl durch „D“ ersetzen oder „E“

+0

Danke Sven. Du hast Recht. Ich habe meine Antwort bearbeitet. Deine Antwort ist besser :) – Vincent

1
data[ data == "D" ] = NA 

Beachten Sie, dass Wenn Sie versuchen, NA durch "D" zu ersetzen, wird das Umgekehrte (df [df == NA] = "D") nicht funktionieren; Sie müssten df [is.na (df)] < verwenden - "D"

3

Hier ist ein Weg, um Werte in mehreren Spalten zu ersetzen:

# an example data frame 
dat <- data.frame(x = c("D", "E", "F", "G"), 
        y = c("A", "B", "C", "D"), 
        z = c("X", "Y", "Z", "A")) 
# x y z 
# 1 D A X 
# 2 E B Y 
# 3 F C Z 
# 4 G D A 

# values to replace 
na.strings <- c("D", "E", "F") 

# index matrix 
idx <- Reduce("|", lapply(na.strings, "==", dat)) 

# replace values with NA 
is.na(dat) <- idx 

dat 
#  x y z 
# 1 <NA> A X 
# 2 <NA> B Y 
# 3 <NA> C Z 
# 4 G <NA> A 
Verwandte Themen