数据集中的模式匹配



已经纠结了一段时间了

我有一个具有两列的数据集,一个描述列和另一个是我试图与描述列匹配的模式列。如果Description列中存在对应的模式,则需要用星号

替换。

例如,如果Description是ABCDEisthedescription, Pattern是ABCDE,那么新的Description应该是*isthedescription

我尝试了以下方法data$NewDescription <- gsub(data$pattern,"\*",Data$Description )

因为数据集中有多行,它抛出一个错误(而不是一个警告)"参数'pattern'的长度> 1,并且只使用第一个元素"

任何帮助都将非常感激。

您可以在这里使用mapply将函数应用于每行。

#sample data
data<-data.frame(
    pattern=c("ABCDE","XYZ"), 
    Description=c("ABCDEisthedescription", "sillyXYZvalue")
)
现在使用mapply
mapply(function(p,d) gsub(p, "\*", d, fixed=T), data$pattern, data$Description)
# [1] "\*isthedescription" "silly\*value" 

另外,

Patterns <- paste0(
  sample(LETTERS[1:4],500,replace=TRUE),
  sample(LETTERS[1:4],500,replace=TRUE),
  sample(LETTERS[1:4],500,replace=TRUE),
  sample(LETTERS[1:4],500,replace=TRUE))
##
Desc <- paste0(Patterns,"isthedescription")
Ptrn <- sample(Patterns,500)
##
Data <- data.frame(
  Description=Desc,
  Pattern=Ptrn,
  stringsAsFactors=FALSE)
##
newDesc <- sapply(1:nrow(Data), function(X){
  if(substr(Data$Description[X],1,4)==Data$Pattern[X]){
    gsub(Data$Pattern[X],"*",Data$Description[X])
  } else {
    Data$Description[X]
  }
})

@MrFlick的方法似乎更简洁。

相关内容

  • 没有找到相关文章

最新更新