问题
I have a dataset that has a column like
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')
I want to replace the string value id they match the value in replacement. I am using the following code right now
gsub(paste(replacement, collapse = "|"), replacement = replacement, x = string)
This in another piece of code which i am using to find the cases
string[grepl(paste(replacement, collapse='|'), string, ignore.case=TRUE)]
I want to update the ones that I find I want the output to be like
Rstudio,Rstudio,'',Jupyter,spyder,R
I don't want to do it by hard coding it. I want to write a code that is scalable.
Any help is really appreciated
thanks in advance
回答1:
isolate id
using gsub
function and then find id
that is not matching the length of replacement
by means of is.na
function. Then replace the identified id with empty character ''
.
EDIT: Since you changed the string data in the question, I modified the gsub
function. The pattern used in gsub
function will find the numeric value right after lib
text and omit the remaining part of the string element.
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"
回答2:
This another simple code I used. That doesn't need the regex function.Thanks for the help
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)]=''
来源:https://stackoverflow.com/questions/42684589/replace-the-string-value-with-value-in-the-find-list-in-r