提取可能字符列表右侧的所有字符
Extract all characters to the right of a list of possible characters
我在数据框中有一系列字符串,如下所示:
item_time<-c("pink dress july noon", "shirt early september morning", "purple dress
april", "tall purple shoes february")
我想提取可能字符列表右侧的所有字符,如下所示:
item<-c("pink dress","shirt","purple dress", "tall purple shoes")
我想要的结果是这样的:
[1] july noon
[2] early september morning
[3] april
[4] february
我无法用空格分隔它们,因为时间和项目列表中的单词数量不同。我也没有将它们分开的符号。我觉得应该有一种非常简单而优雅的方法来解决这个问题,但我想不通。
您可以使用 sub
和正则表达式来做到这一点。
Pat = paste0("(.*)(", paste0(item, collapse="|"), ")(.*)")
sub(Pat, "\3", item_time)
[1] " july noon" " early september morning"
[3] " april" " february"
详情:创建的模式为:
Pat
[1] "(.*)(pink dress|shirt|purple dress|tall purple shoes)(.*)"
中间部分"(.*)(pink dress|shirt|purple dress|tall purple shoes)
匹配你的任意一种模式。第一个 (.*)
匹配模式之前的任何内容。第二个 (.*)
匹配模式之后的任何内容。然后 sub
语句将整个字符串替换为模式匹配后的部分。
另一种方法是使用 mapply
mapply(gsub,pattern=item,replacement='',x=item_time)
如果您还想删除 item
和 item_time
右侧部分之间的 space,您可以改用:
mapply(gsub,pattern=paste0(item,' '),replacement='',x=item_time)
这是另一个使用 stringr::str_replace(string, pattern, replacement)
的选项,它的优点是它在 string
和 pattern
(以及 replacement
)上都被矢量化了。
trimws(stringr::str_replace(item_time, item, ""))
#[1] "july noon" "early september morning"
#[3] "april" "february"
trimws
删除前导空格。
请注意,这需要 item_time
和 item
具有成对匹配条目。
我在数据框中有一系列字符串,如下所示:
item_time<-c("pink dress july noon", "shirt early september morning", "purple dress
april", "tall purple shoes february")
我想提取可能字符列表右侧的所有字符,如下所示:
item<-c("pink dress","shirt","purple dress", "tall purple shoes")
我想要的结果是这样的:
[1] july noon
[2] early september morning
[3] april
[4] february
我无法用空格分隔它们,因为时间和项目列表中的单词数量不同。我也没有将它们分开的符号。我觉得应该有一种非常简单而优雅的方法来解决这个问题,但我想不通。
您可以使用 sub
和正则表达式来做到这一点。
Pat = paste0("(.*)(", paste0(item, collapse="|"), ")(.*)")
sub(Pat, "\3", item_time)
[1] " july noon" " early september morning"
[3] " april" " february"
详情:创建的模式为:
Pat
[1] "(.*)(pink dress|shirt|purple dress|tall purple shoes)(.*)"
中间部分"(.*)(pink dress|shirt|purple dress|tall purple shoes)
匹配你的任意一种模式。第一个 (.*)
匹配模式之前的任何内容。第二个 (.*)
匹配模式之后的任何内容。然后 sub
语句将整个字符串替换为模式匹配后的部分。
另一种方法是使用 mapply
mapply(gsub,pattern=item,replacement='',x=item_time)
如果您还想删除 item
和 item_time
右侧部分之间的 space,您可以改用:
mapply(gsub,pattern=paste0(item,' '),replacement='',x=item_time)
这是另一个使用 stringr::str_replace(string, pattern, replacement)
的选项,它的优点是它在 string
和 pattern
(以及 replacement
)上都被矢量化了。
trimws(stringr::str_replace(item_time, item, ""))
#[1] "july noon" "early september morning"
#[3] "april" "february"
trimws
删除前导空格。
请注意,这需要 item_time
和 item
具有成对匹配条目。