2016-06-02 25 views
1

Ich möchte leere Zellen ("") in einer Spalte mit "Nein" ersetzen. Die fehlenden Einträge haben eine Bedeutung für mich (noch kein Score) und ich möchte die Faktorvariable später in einem Regressionsbaum verwenden.Ersetzen leere Zelle mit "Nein" in R

fand ich eine ähnliche Frage hier (Replace blank cells with character) und versuchte, die folgende, aber dann werden die leeren Zellen zu NA und nicht als Text konvertieren:

> Test$SCORE[Test$SCORE==" "]<- "no" 

Warning message: 
In `[<-.factor`(`*tmp*`, Test$SCORE == " ", value = c(NA, NA, 8L, : 
    invalid factor level, NA generated 

Gibt es eine Möglichkeit NA zu vermeiden und meine eigenen verwenden Text?

Bitte siehe Beispieldaten "Test":

ID Score 
1. A 
2. " " 
3. B 
4. " " 
5. C 

Gibt es eine Möglichkeit NA zu vermeiden und meine eigenen Text verwenden? Dies ist das Ergebnis, das ich erreichen möchte:

ID Score 
1 A 
2 "no" 
3 B 
4 "no" 
5 C 

Der Datensatz ist sehr groß daher eine manuelle Lösung über Indizierung bestimmte Zeilen recht zeitaufwendig ist. Ich schätze deine Hilfe, denn R ist ziemlich neu für mich.

Vielen Dank im Voraus.

Zusätzliche Informationen:

str (Test $ SCORE) Faktor w/13 Stufen "", "A", "B", "C", ..

Bitte entschuldigen das Format der Beispieltabelle, aber das ist meine erste Frage.

Antwort

6

Arbeiten an den Faktorstufen:

DF <- read.table(text = 'ID Score 
       1. A 
       2. " " 
       3. B 
       4. " " 
       5. C', header = TRUE) 
levels(DF$Score)[levels(DF$Score) == " "] <- "no" 
# ID Score 
#1 1  A 
#2 2 no 
#3 3  B 
#4 4 no 
#5 5  C 

Dies ist sehr effizient, da es in der Regel weit weniger Faktorstufen als Elemente in Ihrem Vektor sind.

0
> df <- data.frame(Test=1:5,Score=c("A"," ","B"," "," ")) 
> df 
    Test Score 
1 1  A 
2 2  
3 3  B 
4 4  
5 5  

> df[,2] <- as.character(df$Score) 
> is.character(df[,2]) 
[1] TRUE 

> df$Score[df$Score==" "] <- "No" 
> df 
    Test Score 
1 1  A 
2 2 No 
3 3  B 
4 4 No 
5 5 No 
+0

Wir müssen möglicherweise zurück zu Faktor konvertieren. – zx8754

+0

Wenn Sie im Faktor selbst wollen, dann sollte 'levels()' Funktion verwendet werden. dann keine Notwendigkeit der Umwandlung in 'as.character()' Dieser Befehl würde, 'Ebenen (df $ Score) [Ebenen (df $ Score) ==" "] <-" Nein "' –

+1

Ja, ich bin bewusst, daher Roland Lösung ist eine bessere Option. Als OP muss Faktor-Spalte als Faktor beibehalten werden. – zx8754

Verwandte Themen