在 R 中格式化 Phone 个数字
Formatting Phone Numbers in R
所以我有一个 phone 没有标准格式的数字列表,因此它们可以是 (123)-456-7890、1234567890、456890、456-7890。
我想查看我的 phone 号码列表并将它们格式化为
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
}
但是我遇到了错误 - 有什么想法吗?
我希望将 phone 个长度为 10 的数字的输出格式设置为 123-456-7890,将 phone 个长度为 7 的数字的格式设置为 123- 4567.对于无效条目,应将其删除。
谢谢!!!
像这样,
p <- c("(123)-456-7890", "1234567890", "456890 ", "456-7890", " (123)-4567890")
p
# >[1] "(123)-456-7890" "1234567890" "456890 " "456-7890"
# >[5] " (123)-4567890"
p <- trimws(gsub("[[:punct:]]", "", p))
# > # p <- gsub("[-,),(]", "", p) ) # altrenative, but does not remove whitespace!
p
# >[1] "1234567890" "1234567890" "456890" "4567890" "1234567890"
p[!nchar(p) %in% c(10)] <- NA
p
# >[1] "1234567890" "1234567890" NA NA "1234567890"
p <- gsub("(^\d{3})(\d{3})(\d{4}$)", "\1-\2-\3", p)
p
# >[1] "123-456-7890" "123-456-7890" NA NA "123-456-7890"
p <- p[!is.na(p)] # to remove NA's
p
# >[1] "123-456-7890" "123-456-7890" "123-456-7890"
基于 Eric 的回答并尝试将所有部分放在一起,我认为这就是我的处理方式。
关键步骤是
- 删除所有标点符号。此时,一切都应该是数字或字符值。
- 将所有 phone 不是 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:
所以我有一个 phone 没有标准格式的数字列表,因此它们可以是 (123)-456-7890、1234567890、456890、456-7890。
我想查看我的 phone 号码列表并将它们格式化为 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
}
但是我遇到了错误 - 有什么想法吗?
我希望将 phone 个长度为 10 的数字的输出格式设置为 123-456-7890,将 phone 个长度为 7 的数字的格式设置为 123- 4567.对于无效条目,应将其删除。
谢谢!!!
像这样,
p <- c("(123)-456-7890", "1234567890", "456890 ", "456-7890", " (123)-4567890")
p
# >[1] "(123)-456-7890" "1234567890" "456890 " "456-7890"
# >[5] " (123)-4567890"
p <- trimws(gsub("[[:punct:]]", "", p))
# > # p <- gsub("[-,),(]", "", p) ) # altrenative, but does not remove whitespace!
p
# >[1] "1234567890" "1234567890" "456890" "4567890" "1234567890"
p[!nchar(p) %in% c(10)] <- NA
p
# >[1] "1234567890" "1234567890" NA NA "1234567890"
p <- gsub("(^\d{3})(\d{3})(\d{4}$)", "\1-\2-\3", p)
p
# >[1] "123-456-7890" "123-456-7890" NA NA "123-456-7890"
p <- p[!is.na(p)] # to remove NA's
p
# >[1] "123-456-7890" "123-456-7890" "123-456-7890"
基于 Eric 的回答并尝试将所有部分放在一起,我认为这就是我的处理方式。
关键步骤是
- 删除所有标点符号。此时,一切都应该是数字或字符值。
- 将所有 phone 不是 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: