#r
#r
Вопрос:
У МЕНЯ ЕСТЬ ФРЕЙМ ДАННЫХ-R
first <- c("robbin", "Santa", "beta", "tom" )
Last <- c("greek", "alpha", "gamma", "angel")
Primaryphone <- c("9988776655","(123)456","(789)6543210","88")
Cellphone <- c("7896000001","1234567890","8877665","7654")
df<-data.frame(first,Last,Primaryphone,Cellphone)
Я пытаюсь воспроизвести следующий вывод:
Взяв первые две буквы фамилии
рассматривайте только телефонные номера с 10 цифрами, если они не должны содержать 10 цифр, их следует игнорировать
последние 4 цифры основного телефона, последние 4 цифры мобильного телефона, если в этих столбцах было 10 символов
Output
gr66550001
al7890
ga3210
Комментарии:
1. Действительно, почему вы откатываете кучу изменений, которые сделали вопрос намного проще для чтения?
2. @RonakShah, у него было (789)6543210 в основном столбце телефона, имеет 10 символов, а у мобильного телефона меньше 10 символов, поэтому он должен считываться только из Primaryphonecolumn
Ответ №1:
Вы можете попробовать следующее :
library(dplyr)
df %>%
#Replace opening, closing round brackets (())
mutate(across(c(Primaryphone, Cellphone), ~ gsub('[()]', '', .)),
#Change value to blank if less than 10 characters
across(c(Primaryphone, Cellphone), ~ replace(., nchar(.) != 10, ''))) %>%
#Keep only those rows which have 10 characters in Primaryphone or Cellphone
filter(nchar(Primaryphone) == 10 | nchar(Cellphone) == 10) %>%
#Paste the output using substring
mutate(output = paste0(substring(Last, 1, 2),
substring(Primaryphone, nchar(Primaryphone) - 3),
substring(Cellphone, nchar(Cellphone) - 3)))
# First Last Primaryphone Cellphone output
#1 robbin greek 9988776655 7896000001 gr66550001
#2 Santa alpha 1234567890 al7890
#3 beta gamma 7896543210 ga3210
Комментарии:
1. Спасибо, что все разобрано
2. Ваши решения всегда являются хорошим источником обучения для меня @Ronak.
3. @Ronak Shah, когда я пытаюсь заменить код своими данными, он отображает выходные данные как ZH7527NA, поскольку он добавляет NA, если есть пробел
4. @Ronak Shah, когда я пытаюсь заменить код своими данными, он отображает выходные данные как ZH7527NA, поскольку он добавляет NA, если есть пробел
5. @Perry Вы также можете заменить
NA
на пробел. Изменение в этой части.replace(., nchar(.) != 10 | is.na(.), '')