2016-05-02 11 views
0

Ich benutze die recode() - Funktion im Auto-Paket, um eine ganzzahlige Klassenvariable in einem Datenrahmen zu rekodieren. Ich versuche, einen der Werte der Variablen in einen String umzuwandeln, der ein einzelnes Apostroph (') enthält. Dies funktioniert jedoch nicht. Ich stelle mir vor, dass der einzelne Apostroph die Zuweisung vorzeitig beendet. Also habe ich versucht, \ 'zu benutzen, um die Funktion zu verlassen, aber es funktioniert auch nicht.R: Apostroph in recode()

Ich würde gerne recode() weiter verwenden, aber wenn das keine Option ist, sind Alternativen willkommen.

Ein Arbeitsbeispiel:

# Load car() and dplyr() 
library(car) 
library(dplyr) 

# Set up df 
a <- seq(1:3) 
b <- rep(9,3) 
df <- cbind(a,b) %>% as.data.frame(.) 

# Below works because none of the recoding includes an apostrophe: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foobar'") 

# Below doesn't work due to apostrophe in foofoo's: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foofoo's'") 

# Exiting doesn't fix it: 
recode(df$a, "1 = 'foo'; 2 = 'bar'; 3 = 'foofoo\'s'") 

Antwort

0

Wir die Zitate entkommen konnten, um es

recode(df$a, "1 = \"foo\"; 2 = \"bar\"; 3 = \"foofoo's\"") 
#[1] "foo"  "bar"  "foobar's" 

A base R Alternative die df$a Werte als numerischer Index die zu ersetzen, wäre zu verwenden, funktioniert Werte

df$a <- c("foo", "bar", "foobar's")[df$a] 
df$a 
#[1] "foo"  "bar"  "foobar's" 

Angenommen, die Werte sind nicht numerisch und nicht in der Reihenfolge.

set.seed(24) 
v1 <- sample(LETTERS[1:3], 10, replace=TRUE) 
v1 
#[1] "A" "A" "C" "B" "B" "C" "A" "C" "C" "A" 
as.vector(setNames(c("foo", "bar", "foobar's"), LETTERS[1:3])[v1]) 
#[1] "foo"  "foo"  "foobar's" "bar"  "bar"  "foobar's" 
#[7] "foo"  "foobar's" "foobar's" "foo" 

Hier ersetzen wir "A" mit "foo", "B" mit "bar" und "C" mit "foobar ist". Erstellen Sie dazu einen benannten Schlüssel/Wert-Vektor, um Werte in 'v1' zu ersetzen.