R 提取可能字符列表右侧的所有字符
我在数据帧中有一系列字符串,如下所示:R 提取可能字符列表右侧的所有字符,r,string,extract,R,String,Extract,我在数据帧中有一系列字符串,如下所示: item_time<-c("pink dress july noon", "shirt early september morning", "purple dress april", "tall purple shoes february") 我不能用空格来分隔它们,因为时间和项目列表中的单词数量不同。我也没有一个符号来区分它们。我觉得应该有一个非常简单和优雅的方法来解决这个问题,但我想不出来 您可以使用sub和正则表达式来执行此操作 Pat =
item_time<-c("pink dress july noon", "shirt early september morning", "purple dress
april", "tall purple shoes 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)(.*)"
中间部分(.*)(粉色连衣裙、衬衫、紫色连衣裙、高高的紫色鞋子)匹配任何一种图案。第一个
(.*)
匹配图案之前的任何图案。第二个(.*))
匹配模式后的任何内容。sub
语句随后将整个字符串替换为模式匹配后的部分。您可以使用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)(.*)"
中间部分
“(.*)(粉色连衣裙|衬衫|紫色连衣裙|高高的紫色鞋子)
与您的任何一种图案匹配。第一个(.*)
匹配模式之前的任何内容。第二个(.*)
匹配模式后面的任何内容。然后,sub
语句将整个字符串替换为模式匹配后的部分 另一种方法是使用mapply
mapply(gsub,pattern=item,replacement='',x=item_time)
如果您还想删除项目
和项目_时间
右侧部分之间的空格,您可以改为使用:
mapply(gsub,pattern=paste0(item,' '),replacement='',x=item_time)
另一种方法是使用mapply
mapply(gsub,pattern=item,replacement='',x=item_time)
如果您还想删除项目
和项目_时间
右侧部分之间的空格,您可以改为使用:
mapply(gsub,pattern=paste0(item,' '),replacement='',x=item_time)
这里是另一个使用
stringr::str_replace(string,pattern,replacement)
的选项,它的优点是它在string
和pattern
上都是矢量化的(以及replacement
)
trimws
删除前导空格
请注意,这需要
item\u time
和item
具有成对匹配的条目。这里是另一个使用stringr::str\u replace(string,pattern,replacement)
的选项,它的优点是在string
和pattern
(以及replacement
)上进行矢量化
trimws
删除前导空格
请注意,这需要
item_time
和item
具有成对匹配的条目。可以简化为:Pat=paste0(“*”,paste0(item,collapse=“|”)和“)\\s+”;sub(Pat,“,item_time)
我收到一条错误消息,“模式和替换向量必须相同长度”…谢谢!我不明白那个错误。哪条语句给了您这个错误?sub(Pat,\\3,item_time)DT=data。table(time=sub(Pat,\\2,item_time))
可以简化为:Pat=paste0(“*”,paste0(item,collapse=“”)\\s+”;sub(Pat,“,item_time)
我收到一条错误消息,“模式和替换向量必须相同长度”…谢谢!我不明白那个错误。哪个语句给了你这个错误?sub(Pat,“\\3”,item_time)DT=data.table(time=sub(Pat,“\\2”,item_time))
或者trimws(mapply(gsub,item',,item_time,fixed=TRUE))
或者trimws(mappy(gsub,item',item_time,fixed=TRUE))