提问人:Hack-R 提问时间:8/22/2014 最后编辑:Hack-R 更新时间:8/22/2014 访问量:2162
有条件地删除 R 中向量元素的字符
Conditionally Remove Character of a Vector Element in R
问:
我有(有时不完整的)地址数据,如下所示:
data <- c("1600 Pennsylvania Avenue, Washington DC",
",Siem Reap,FC,", "11 Wall Street, New York, NY", ",Addis Ababa,FC,")
如果第一个和/或最后一个字符是逗号,我需要删除它们。
到目前为止,我有:
for(i in 1:length(data)){
lastchar <- nchar(data[i])
sec2last <- nchar(data[i]) - 1
if(regexpr(",",data[i])[1] == 1){
data[i] <- substr(data[i],2, lastchar)
}
if(regexpr(",",data[i])[1] == nchar(data[i])){
data[i] <- substr(data[i],1, sec2last)
}
}
data
它适用于第一个字符,但不适用于最后一个字符。如何修改第二条语句或以其他方式实现我的目标?if
答:
3赞
Avinash Raj
8/22/2014
#1
您可以尝试以下代码,删除开头或结尾处的逗号,
> data <- c("1600 Pennsylvania Avenue, Washington DC",
+ ",Siem Reap,FC,", "11 Wall Street, New York, NY", ",Addis Ababa,FC,")
> gsub("(?<=^),|,(?=$)", "", data, perl=TRUE)
[1] "1600 Pennsylvania Avenue, Washington DC"
[2] "Siem Reap,FC"
[3] "11 Wall Street, New York, NY"
[4] "Addis Ababa,FC"
模式说明:
(?<=^),
在正则表达式中称为正向后视。在我们的例子中,它断言逗号前面的内容必须是行开始。因此,它与起始逗号匹配。(?<=)
^
|
逻辑 OR 运算符通常用于组合(即 ORing)两个正则表达式。,(?=$)
展望未来,逗号后面的内容一定是行尾。因此,它与行尾的逗号匹配。$
评论
0赞
Hack-R
8/22/2014
我真的很欣赏这个解决方案。冒着需要的风险,我想知道您是否可以稍微解释一下逻辑/正则表达式?我正在努力弄清楚,这样我就会更加独立。
0赞
Hack-R
8/22/2014
再次感谢;非常感谢!我相信其他人也会从中吸取教训,这要归功于模式解释。
评论
gsub("^,(.*),$","\\1", data)