Как установить все целые и / или числовые значения в символьном векторе? - PullRequest
0 голосов
/ 07 июня 2019

Учитывая вектор строк, например:

set.seed(1)
chr_vec <- c(sample(1:100000, 10), "12to145", "15:19", sample(1:100000, 10), "111.333", "567.1")

Как я могу подмножество всех строк, которые являются целыми числами?Например:

int_vec <- chr_vec[c(1:10, 13:22)]

Как я могу подмножество всех числовых строк?Например:

num_vec <- chr_vec[c(1:10, 13:24)]

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Вы можете использовать gsub для удаления цифр и сопоставления с пустыми пробелами (целыми числами) или пустыми пробелами и точками (цифрами), т. Е.

ints <- chr_vec[gsub('\\d+', '', chr_vec) == '']
numerics <- chr_vec[gsub('\\d+', '', chr_vec) %in% c('', '.')]

TESTING

identical(numerics, num_vec)
#[1] TRUE
identical(ints, int_vec)
#[1] TRUE
0 голосов
/ 07 июня 2019

Мы можем использовать grep с шаблоном.

Для целых чисел

grep("^\\d+$", chr_vec, value = TRUE)

#[1] "26551" "37213" "57285" "90819" "20168" "89835" "94462" 
#    "66076" "62907" "6179"  "20598" "17656" "68701" "38410" 
#    "76982" "49768" "71758" "99184" "38001" "77738"

и для числовых

grep("^\\d+(\\.\\d+)?$", chr_vec, value = TRUE)

#[1] "26551" "37213" "57285" "90819" "20168" "89835" "94462"   
#    "66076" "62907" "6179" "20598" "17656" "68701"  "38410"   
#    "76982" "49768" "71758" "99184" "38001" "77738" "111.333" "567.1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...