2017-03-09 4 views
1

Ich habe eine Datenmenge, die eine Spalte wieErsetzen Sie den String-Wert mit dem Wert in der Suchliste in R

string<-c('lib1_Rstudio_case1','lib2_Rstudio_case1and2','lib5_python_notthe correct_language','lib3_Jupyter_really_good','lib1_spyder_nice','lib1_R_the_core') 
    replacement<-c('Rstudio','Jupyter','spyder','R') 

ich den String-Wert id sie den Wert in Ersatz passen ersetzen möchten hat. Ich verwende den folgenden Code jetzt

gsub(paste(replacement, collapse = "|"), replacement = replacement, x = string) 

diese in einem anderen Teil des Codes, die ich die Fälle

string[grepl(paste(replacement, collapse='|'), string, ignore.case=TRUE)] 

ich die, die zu aktualisierenden finden bin mit, dass ich finden möchte ich die Ausgabe zu sein wie

Rstudio,Rstudio,'',Jupyter,spyder,R 

Ich möchte es nicht durch harte Codierung machen. Ich möchte einen Code schreiben, der skalierbar ist.

Jede Hilfe ist wirklich

Dank im Voraus

+0

Try 'ifelse ((x <- '* _' sub (, '', string))% in% Ersatz, x, '') ' –

+0

Diese Codewörter für mich, aber ich kann nichts ersetzen grep (einfügen (ersatz, collapse = '|'), string, ignore.case = TRUE)] –

+0

Entschuldigung dafür. Ich werde versuchen, die Fragen zu bearbeiten –

Antwort

0

Dies ist ein weiterer einfacher Code, den ich verwendet habe. Das muss nicht die regex function.Thanks für die Hilfe

string<-c('lib1_Rstudio_case1','lib2_Rstudio_case1and2','lib5_python_notthe correct_language','lib3_Jupyter_really_good','lib1_spyder_nice','lib1_R_the_core') 
replacement<-c('R','Jupyter','spyder','Rstudio') 
replaced=string 
replaced='' 


for (i in 1:length(replacement)) 
{ 
    replaced[which(grepl(replacement[i],string))]=replacement[i] 
} 
replaced[is.na(replaced)]='' 
1

isolieren id mit gsub Funktion geschätzt und dann id finden, die nicht die Länge der replacement mittels is.na Funktion entsprechen. Ersetzen Sie dann die identifizierte ID durch ein leeres Zeichen ''.

EDIT: Da Sie die Zeichenfolge Daten in der Frage geändert haben, habe ich die gsub Funktion geändert. Das Muster, das in der gsub Funktion verwendet wird, findet den numerischen Wert direkt nach lib Text und lässt den restlichen Teil des Zeichenfolgenelements aus.

replacement<-c('Rstudio','Jupyter','spyder','R') 

string<-c('lib1_Rstudio','lib2_Rstudio','lib5_python','lib3_Jupyter','lib1_spyder','lib1_R') 
index <- is.na(replacement[ as.integer(gsub("lib([[:digit:]])*[[:alnum:]_\ ]*", "\\1", string)) ]) 
a1 <- sapply(strsplit(string, "_"), function(x) x[2]) 
a1[ index ] <- '' 
a1 
# [1] "Rstudio" "Rstudio" ""  "Jupyter" "spyder" "R"  

string <- c('lib1_Rstudio_case1','lib2_Rstudio_case1and2','lib5_python_notthe correct_language','lib3_Jupyter_really_good','lib1_spyder_nice','lib1_R_the_core') 
index <- is.na(replacement[ as.integer(gsub("lib([[:digit:]])*[[:alnum:]_\ ]*", "\\1", string)) ]) 
a1 <- sapply(strsplit(string, "_"), function(x) x[2]) 
a1[ index ] <- '' 
a1 
# [1] "Rstudio" "Rstudio" ""  "Jupyter" "spyder" "R" 
+0

Ich änderte den Rang der Zeichenfolge, wie 'string <-c ('lib1_Rstudio', 'lib2_python', 'lib5_Rstudio', 'lib3_Jupyter', 'lib1_spyder', 'lib1_R') und zurück falsches Ergebnis '" Rstudio "" python "" "" Jupyter "" spyder "" R "'. Können Sie mir sagen, warum es falsch ist? –

+0

Die ID 5 ist größer als die Länge von 'replacement', was das dritte Element' lib5_Rstudio' in '' '' leeres Zeichen verwandelt – Sathish

+0

Die Länge von 'replacement' ist 4, da es in diesem Zeichen 4 Elemente gibt Vektor - 'Ersatz' – Sathish

Verwandte Themen