我的原始数据有很多个人信息,所以我在R中屏蔽它们。示例数据和我的原始代码如下:
install.packages("stringr")
library(string)
x = c("010-1234-5678",
"John 010-8888-8888",
"Phone: 010-1111-2222",
"Peter 018.1111.3333",
"Year(2007,2019,2020)",
"Alice 01077776666")
df = data.frame(
phoneNumber = x
)
pattern1 = "\\d{3}-\\d{4}-\\d{4}"
pattern2 = "\\d{3}.\\d{4}.\\d{4}"
pattern3 = "\\d{11}"
delPhoneList1 <- str_match_all(df, pattern1) %>% unlist
delPhoneList2 <- str_match_all(df, pattern2) %>% unlist
delPhoneList3 <- str_match_all(df, pattern3) %>% unlist
我从数据集中发现了三种类型的模式,每种结果如下:
> delPhoneList1
[1] "010-1234-5678" "010-8888-8888" "010-1111-2222"
> delPhoneList2
[1] "010-1234-5678" "010-8888-8888" "010-1111-2222" "018.1111.3333" "007,2019,2020"
> delPhoneList3
[1] "01077776666"
Pattern1 是我国典型的电话号码类型,使用破折号,但有人使用逗号输入类似 pattern2 的号码。但是,pattern2 还包含pattern1,因此它会检测其他模式,如年份系列。这是一个意想不到的结果。
我的问题是如何匹配我定义的确切模式。Pattern2 包含过多的模式,例如"007,2019,2020"
from "Year(2007,2019,2020)"
.
此外,下一步是使用以下代码屏蔽号码:
for (phone in delPhoneList1) {
df$phoneNumber <- gsub(phone, "010-9999-9999", df$phoneNumber)
}
我认为该代码对我来说是完美的,但如果您有更有效的方法,请告诉我。
Thanks.