已经挣扎了一段时间。
我有一个包含两列的数据集,一个Description列,另一个是我尝试与描述列匹配的模式列。如果Description列中存在相应的模式,则需要用星号替换它
例如,如果说明是ABCDEisthedescription且模式是ABCDE,那么新描述应该是*是描述
我尝试了以下内容
data$NewDescription <- gsub(data$pattern,"\\*",Data$Description )
因为数据集中有多行,所以会抛出错误(相反警告) &#34;论证&#39;模式&#39;长度> 1,只使用第一个元素&#34;
任何帮助都将非常感激。
答案 0 :(得分:0)
您可以在此处使用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"
答案 1 :(得分:0)
此外,
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的方法似乎更简洁。