У меня есть фрейм данных, который содержит номера телефонов в разных форматах, я пытаюсь очистить неправильно отформатированные номера и унифицировать формат путем создания нового столбца.телефонные номера существуют в 3 столбцах: CountryCode, AreaCode, MobileNumber.Я написал следующий код для создания нового столбца на основе нескольких условий if:
library(dplyr)
data <- mutate(data, Number =
if(nchar(data$MobileNumber >= 12))
{paste("+", data$MobileNumber)
} else if (nchar(data$MobileNumber >= 9))
{paste("+", data$CountryCode, data$MobileNumber)
} else if (data$CountryCode == data$AreaCode)
{paste("+", data$CountryCode, data$MobileNumber)
} else (paste("+", data$CountryCode, data$AreaCode, data$MobileNumber)))
он действует на основе условия только первой строки, выдавая следующее предупреждение:
Warning message:
In if (nchar(data$MobileNumber >= 12)) { :
the condition has length > 1 and only the first element will be used
Я также пытался создать 3 вектора для CountryCode, AreaCode, MobileNumber, а затем создать функцию, которая принимает 3 вектора в качестве входных данных и правильно отформатированное число в качестве выходных, используя условия if и цикл for, но также не удалась.
# x is number y is country code z is area code n is the output
x <- data$MobileNumber
y <- as.character(data$CountryCode)
z <- data$AreaCode
#cleaning function
out <- vector("character", nrow(data))
CleanNum <- function(x, y, z)
{ for(i in 1:length(x))
{ if(nchar(x[i] >= 12)) {n[i] <- paste("+", x[i])
} else if (nchar(x[i] >= 9)) {n[i] <- paste("+", y[i], x[i])
} else if (y[i] == z[i]) {n[i] <- paste("+", y[i], x[i])
} else (n[i] <- paste("+", y[i], z[i], x[i]))
out[i] <- n[i] }}
Num_vec <- CleanNum(x, y, z)
У меня небольшой опыт в R, и любая помощь очень ценится.