因此,我列出了没有标准格式的电话号码,因此可以是(123)-456-7890、1234567890、456890、456-7890。
我想浏览一下我的电话号码列表并将其格式设置为123-456-7890 456-7890
到目前为止,我在R中拥有的是
phone_num <- gsub("-","", gsub("\\(","", gsub("\\)","", csv_file$Phone))) if(nchar(phone_num)== 10) { cleaned_phone <-gsub("(\\d{3})(\\d{3})(\\d{4}$)", "\\1-\\2-\\3", phone_num) } else if (nchar(phone_num) == 7){ cleaned_phone <-gsub("(\\d{3})(\\d{4}$)", "\\1-\\2", phone_num) } else (nchar(phone_num) != 7 || nchar(phone_num) != 10){ cleaned_phone <- #delete entry }
但是我遇到了错误-有什么想法吗?
我希望输出的长度为10的电话号码格式为123-456-7890,长度为7的电话号码格式为123-4567。对于无效的条目,应将其删除。
谢谢!!!
在埃里克(Eric)的答案的基础上,尝试将所有内容放在一起,我想这就是我要去做的。
关键步骤是
删除所有标点符号。此时,所有内容都应为数字或字符值。
将所有不是7或10位数字的电话号码设置为NA(或您选择的其他值)
重新格式化7位数字
重新格式化10位数字。
我尝试了几种不同的方法,但是这种方法似乎是最有效的。
phone_it_in <- function(phone, invalid = NA) { phone <- gsub("[[:punct:]]", "", phone) # remove punctuation phone <- trimws(phone) # remove whitespace phone[!nchar(phone) %in% c(7, 10)] <- invalid # keep only 7 or 10 digit numbers phone[nchar(phone) %in% 7] <- gsub("(^\\d{3})(\\d{4}$)", "\\1-\\2", phone[nchar(phone) %in% 7]) phone[nchar(phone) %in% 10] <- gsub("(^\\d{3})(\\d{3})(\\d{4}$)", "\\1-\\2-\\3", phone[nchar(phone) %in% 10]) phone } phone <- c("(123)-456-7890", "1234567890", "456890", "456-7890") phone_it_in(phone)
编辑:更改自,invalid = NA
因为它导致以下错误:
Error in phone[nchar(phone) == 7] <- gsub("(^\\d{3})(\\d{4}$)", "\\1-\\2", : NAs are not allowed in subscripted assignments Traceback: