gpt4 book ai didi

r - 在 R 中格式化电话号码

转载 作者:行者123 更新时间:2023-12-04 09:15:47 25 4
gpt4 key购买 nike

所以我有一个没有标准格式的电话号码列表,因此它们可以是 (123)-456-7890、1234567890、456890、456-7890。

我想浏览我的电话号码列表并将它们格式化为123-456-7890456-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 的回答并尝试将所有部分放在一起,我认为这就是我要解决的问题。

关键步骤是

  1. 删除所有标点符号。此时,一切都应该是数字或字符值。
  2. 将所有非 7 位或 10 位数字的电话号码设置为 NA(或您选择的其他一些值)
  3. 重新格式化 7 位数字
  4. 重新格式化 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:

关于r - 在 R 中格式化电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com