Написание функции для возврата n-й группы номеров в телефонный номер - PullRequest
0 голосов
/ 27 апреля 2020

Например, функция должна быть: function_name(phonenumber, n)

  • function_name(123-456-7890, 1) должна возвращать 123
  • function_name((123)-456-7890, 3) должна возвращать 7890

Ответы [ 5 ]

4 голосов
/ 27 апреля 2020

Одна базовая опция R использует regmatches

function_name <- function(phonenumber, n) regmatches(phonenumber,gregexpr("\\d+",phonenumber))[[1]][n]
4 голосов
/ 27 апреля 2020
function_name <- function(phone, n) Filter(nzchar, strsplit(phone, "\\D+")[[1]])[n]
function_name("123-456-7890", 1)
# [1] "123"
function_name("(123)-456-7890", 3)
# [1] "7890"
2 голосов
/ 27 апреля 2020

Мы можем разделить на - и затем извлечь n-ю группу

f1 <- function(phonenumber, n){
             setdiff(strsplit(phonenumber, '[[:punct:]]+')[[1]], "")[n]
    }

f1('123-456-7890', 3)
#[1] "7890"

f1('(123)-456-7890', 3)
#[1] "7890"
1 голос
/ 27 апреля 2020

Вы можете использовать \\w+ или \\d+:

get_nth_group <- function(x, n) stringr::str_extract_all(x, '\\w+')[[1]][n]

get_nth_group("123-456-7890", 1)
#[1] "123"

get_nth_group("(123)-456-7890", 3)
#[1] "7890"
0 голосов
/ 27 апреля 2020

Я хотел бы предложить что-то вроде этого:

library(tidyverse)

get_phone_group <- function(phonenum, n) {
  str_extract_all(phonenum, "\\d+", simplify = TRUE)[, n]
}

get_phone_group("123-456-7890", 1)
#> [1] "123"
get_phone_group("(123)-456-7890", 3)
#> [1] "7890"
get_phone_group(c("345-169-234", "(123)-456-7890"), 3)
#> [1] "234"  "7890"

Создано в 2020-04-27 пакетом Представить (v0.3.0)

Обратите внимание, что результирующая функция векторизована и поэтому ее удобно использовать, например, в контексте mutate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...