【问题标题】:find character before specified character [closed]在指定字符之前查找字符[关闭]
【发布时间】:2018-08-22 01:54:05
【问题描述】:

我想用gsub 减去字符。

# data
Column name
NORTH HANOVER TWP N J
MULLICA TWP NJ
VERONA N J

我想要的是:

# result
Column name
NORTH HANOVER
MULLICA
VERONA

我尝试这样的事情:

gsub(" TWP.", "", "NORTH HANOVER TWP N J")
[1] "NORTH HANOVERN J"

我得到了错误的结果。
如何修复我的代码?

【问题讨论】:

  • 什么是标记你想要的结束的字符,你有他们的列表吗?对于前两个示例,它是“TWP”,但在第三个示例中,它只是“N”吗?还是“N J”?
  • 逻辑不清楚。您想删除 "TWP" 之后的所有内容吗?但是“VERONA”没有那个。
  • @RonakShah 是的。我想删除“TWP”之后的所有内容。但是,有一些观察结果,例如“VERONA”,它没有“TWP”。结束字符不一定包括“J”,可能还有其他字符。

标签: r regex substring gsub


【解决方案1】:

您能否尝试以下操作(考虑到您的实际输入与所示示例相同)。

gsub(" TWP.*| N.*","",cal)

输出如下。

[1] "NORTH HANOVER" "NORTH HANOVER" "MULLICA"       "VERONA" 

其中数据如下。

cal <- data.frame(column_name=c("NORTH HANOVER","NORTH HANOVER TWP N J","MULLICA TWP NJ","VERONA N J"))

【讨论】:

  • gsub(" TWP.*| N.*","", cal$column_name) 有效。实际上,并非所有观察都在数据集中包含“N”。它可能包含其他内容。但它有效。谢谢
【解决方案2】:

更通用一点的模式(不是说 100% 防故障)

cal <- c("NORTH HANOVER TWP N J","MULLICA TWP NJ","VERONA N J","Sierra Nevada TWP NJ")

gsub("\\sTWP\\s?N\\s?J.*|\\sN\\s?J.*","",cal)

#[1] "NORTH HANOVER" "MULLICA"       "VERONA"        "Sierra Nevada"

因为标记的答案会失败。​​

【讨论】:

  • 是的,你的答案是正确的。似乎`N.*` 会删除名称Sierra Nevada TWP NJ 的最后一部分。你能解释一下你的代码吗? \`, s, 是什么意思?
  • 看看 www.regex101.com 。他们比我解释得更好。
猜你喜欢
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2019-08-19
  • 2014-07-10
相关资源
最近更新 更多