如何使用gsub函数去掉地址列每条记录开头的所有特殊字符


Address <- c("#20 W Irving ST","@1 East Street",
             "%222 Rockfard Avenue","-145 W Locust","& 99 East Locus")
Number <- c("A-1","A-2","A-3","A-4","A-5")
DF <- data.frame(Address,Number)

只需删除紧跟在字符串开头之后的任何重复标点符号或空格字符即可。用正则表达式的话说:

gsub("^[[:punct:][:space:]]+","",DF$Address)
#[1] "20 W Irving ST"      "1 East Street"       "222 Rockfard Avenue" "145 W Locust"       
#[5] "99 East Locus" 

这会做你想要的吗? 这假定每个Address的第一个元素是一个特殊字符。 另请注意,要使此代码正常工作,my.data$Address的左端必须与 R GUI 的左边缘齐平。 Address开头不能有任何空字符。

my.data <- read.csv(text = '
        Address,        Number
#20 W Irving ST,         A-1
@1 East Street,          A-2
%222 Rockfard Avenue,    A-3
-145 W Locust,           A-4
& 99 East Locus,         A-5
', header = TRUE, stringsAsFactors = FALSE, na.string = 'NA')
my.data
my.data$Address <- substr(my.data$Address, 2, nchar(my.data$Address))
my.data

如果特殊字符可以出现在Address中的任何位置,并且您想要删除所有特殊字符,则可以尝试此处介绍的功能之一:

用 gsub 替换多个参数

我使用了Theodore Lytras编写的函数,其中包含以下行:

mgsub(c('#','@','%','-','&'), c('','','','',''), my.data$Address)

请注意,使用这两种方法时,地址99 East Locus现在都以空格开头。

如果某些地址

在其第一个元素中具有特殊字符,而某些地址没有,则这可能有效:

my.data <- read.csv(text = '
        Address,        Number
#20 W Irving ST,         A-1
@1 East Street,          A-2
222 W Locust,            A-4
%222 Rockfard Avenue,    A-3
-145 W Locust,           A-4
5 East Street,           A-2
& 99 East Locus,         A-5
', header = TRUE, stringsAsFactors = FALSE, na.string = 'NA')
first.char <- substr(my.data$Address, 1, 1)
my.data$Address <- ifelse(first.char %in% c('#','@','%','-','&'), substr(my.data$Address, 2, nchar(my.data$Address)), my.data$Address)
my.data

最新更新