我有关于地址的(有时是不完整的)数据,如下所示:
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
语句或以其他方式实现我的目标?
答案 0 :(得分:3)
您可以尝试使用以下代码删除开头或结尾处的逗号,
> 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)两个正则表达式。,(?=$)
Lookahead aseerts,逗号后面的内容必须是行结尾$
。所以它匹配行尾的逗号。