Mad*_*die 2 if-statement r gsub
因此,我列出了没有标准格式的电话号码,因此可以是(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
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了错误-有什么想法吗?
我希望输出的长度为10的电话号码格式为123-456-7890,长度为7的电话号码格式为123-4567。对于无效的条目,应将其删除。
谢谢!!!
在埃里克(Eric)的答案的基础上,尝试将所有内容放在一起,我想这就是我要去做的。
关键步骤是
我尝试了几种不同的方法,但是这种方法似乎是最有效的。
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)
Run Code Online (Sandbox Code Playgroud)
编辑:更改自,invalid = NA因为它导致以下错误:
Error in phone[nchar(phone) == 7] <- gsub("(^\\d{3})(\\d{4}$)", "\\1-\\2", : NAs are not allowed in subscripted assignments
Traceback:
Run Code Online (Sandbox Code Playgroud)