在R中有条理地删除向量元素的字符

时间:2014-08-21 17:53:08

标签: regex r string character

我有关于地址的(有时是不完整的)数据,如下所示:

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语句或以其他方式实现我的目标?

1 个答案:

答案 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,逗号后面的内容必须是行结尾$。所以它匹配行尾的逗号。