当前位置:  开发笔记 > 开发工具 > 正文

在R中格式化电话号码

如何解决《在R中格式化电话号码》经验,为你挑选了1个好方法。

因此,我列出了没有标准格式的电话号码,因此可以是(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。对于无效的条目,应将其删除。

谢谢!!!



1> Benjamin..:

在埃里克(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:

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有