将字符串值替换为R中查找列表中的值

时间:2017-03-09 00:36:30

标签: r replace gsub qdap

我有一个像

这样的列的数据集
   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')

我想替换它们与替换值匹配的字符串值id。我现在正在使用以下代码

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

这是我用来查找案例的另一段代码

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

我想更新我发现的那些 我希望输出像

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

我不想通过硬编码来做到这一点。我想编写一个可扩展的代码。

非常感谢任何帮助

提前致谢

2 个答案:

答案 0 :(得分:1)

使用Microsoft Visual Studio is busy...函数隔离id,然后通过gsub函数找到与id长度不匹配的replacement。然后用空字符is.na替换标识的ID。

编辑:由于您更改了问题中的字符串数据,因此我修改了''函数。 gsub函数中使用的模式将在gsub文本后面找到数值,并省略字符串元素的剩余部分。

lib

答案 1 :(得分:1)

我使用的另一个简单代码。这不需要正则表达式函数。谢谢你的帮助

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)]=''