我正在尝试清理一组csv格式的数据。将数据加载到R后,我需要替换并从中删除一些字符。以下是一个例子。理想情况下我想
我尝试使用此代码
sub(x = evostreet, pattern = "St.", replacement = " ") and later
gsub(x = evostreet, pattern = "St.", replacement = " ") to remove the St. at the end of each row but this also remove some other occurrences of St and the next character
3 James St.
4 Glover Road St.
5 Jubilee Estate. St.
7 Fed Housing Estate St.
8 River State School St.
9 Brown State Veterinary Clinic. St.
11 Saw Mill St.
12 Dyke St St.
13 Governor Rd St.
答案 0 :(得分:1)
你不需要在这里使用正则表达式。
sub(x = evostreet, pattern = "St.", replacement = " ", fixed=T)
fixed
参数意味着您要替换此确切字符,而不是正则表达式的匹配。
答案 1 :(得分:1)
我看到很多接近的答案,但我没有看到任何解决他所遇到的第二个问题,例如更换圣St。"与" Street&#34 ;;例如," Dyke St St。"
sub
,如文档中所述:
两个*子函数的不同之处仅在于,sub只替换了第一次出现的模式
所以,只需使用" St \\。"因为模式匹配不正确。
OP需要匹配" St St。"的可能的模式。我进一步假设它甚至可能是#34; St。 ST&#34。或者" St。 ST&#34 ;.
假设OP使用的是简单列表:
x = c("James St.", "Glover Road St.", "Jubilee Estate. St.",
"Fed Housing Estate St.", "River State School St St.",
"Brown State Vet Clinic. St. St.", "Dyke St St.")`
[1]" James St。" " Glover Road St."
[3]" Jubilee Estate。 ST&#34。 "美联储住房圣。"
[5]" River State School St St。" "布朗州兽医诊所。 St. St。" [7]" Dyke St St。"
然后,以下内容将根据要求用" Street"替换上述可能的组合:
y <- sub(x, pattern = "[ St\\.]*$", replacement = " Street")
[1]&#34;詹姆斯街&#34; &#34;格洛弗路街&#34;
[3]&#34; Jubilee Estate Street&#34; &#34;美联储住宅区街&#34;
[5]&#34; River State School Street&#34; &#34;布朗州兽医诊所街&#34; [7]&#34; Dyke Street&#34;
修改强>
要回答以下OP的问题,将圣的一个子项替换为圣,另一项用街道,我正在寻找一种能够匹配类似表达式以返回不同值的方法,但此时我还没能找到它。我怀疑regmatches
可以做到这一点,但这是我以后必须要做的事情。
实现您想要的一个简单方法 - 让我们假设:
x <- c("St. Mary St St.", "River State School St St.", "Dyke St. St")
[1]&#34; Saint Mary St St。&#34; &#34; River State School St St。&#34; [3]&#34; Dyke St. St&#34;
所以你希望x [1]为圣玛丽街,x [2]为 River State School Street ,x [3]为戴克街。我想首先通过将sub()
分配给y
来解决 Saint 问题,如:
y <- sub(x, pattern = "^St\\.", replacement = "Saint")
[1]&#34;圣玛丽街&#34; &#34; River State School Street&#34; [3]&#34; Dyke Street&#34;
要解析St的结尾,我们可以使用与发布相同的分辨率,除非现在注意我没有使用x
作为我的输入向量但不是我刚刚制作的y
:
y <- sub(y, pattern = "[ St\\.]*$", replacement = " Street")
这应该照顾它。现在,我不知道这是否是最有效的方法。如果你的数据集相当大,这可能会很慢。如果我找到一个更好的解决方案,我会发布它(假如没有其他人打败我)。
答案 2 :(得分:0)
我认为你的问题是'。'正则表达式世界中的字符表示“任何单个字符”。所以要在R中字面匹配你应该写
sub(x = evostreet, pattern = "St\\.", replacement = " ")
答案 3 :(得分:0)
您需要&#34;评论&#34;点...否则它意味着St之后的任何事情,这就是为什么文本的其他部分被消除的原因。
sub(x = evostreet, pattern = "St\\.", replacement = " ")
如果要删除文本末尾的标记,最后可以添加$。
sub(x = evostreet, pattern = "St\\.$", replacement = " ")
sub
和gsub
之间的区别在于,sub只会处理标记在文本中出现的第一次。如果存在重复,gsub
将消除所有内容。在你的情况下,当你在行的末尾寻找模式时,如果你使用$,它应该没有任何区别。