разделить символ из числа с несколькими цифрами - PullRequest
5 голосов
/ 04 января 2012

У меня есть столбец в кадре данных, где значения представляют собой комбинации букв и цифр, такие как G1, K8, A132 и т. Д. Я хочу отделить букву от числа, но сохранить число как одно число. Я использовал strsplit, но это дает список значений, как показано ниже, где я хотел бы получить выходные данные G и 10:

x <- "G10"
strsplit(x, "")[[1]][1]
"G"
strsplit(x, "")[[1]][-1]
"1" "0"

это приводит к предсказуемым проблемам в нисходящем направлении, когда я пытаюсь использовать числа в качестве чисел. Вот пример paste, в котором я хотел бы получить "somethingelse_10":

z <-strsplit(x, "")[[1]][-1]
paste("somethingelse",z, sep="_")
"somethingelse_1" "somethingelse_0"

Есть ли простой способ отделить числа от букв?

Ответы [ 3 ]

14 голосов
/ 04 января 2012

Вы можете использовать gsub, чтобы исключить все нецифровые или все цифры, например:

> x <- "A3"
> gsub("[^[:digit:]]","",x)
"3"
> gsub("[:digit:]","",x)
"A"

И затем вы можете использовать as.numeric для преобразования из строки в число, если вы хотите.

9 голосов
/ 04 января 2012

Пакет stringr часто имеет удобные функции для такого рода вещей:

require(stringr)
str_extract(c("A1","B2","C123"),"[[:upper:]]")
#[1] "A" "B" "C"
str_extract(c("A1","B2","C123"),"[[:digit:]]+")
#[1] "1"   "2"   "123"

Это предполагает, что каждый элемент имеет ровно одну часть «буквы» и одну часть «числа», поскольку str_extract просто извлекает первый экземпляр матча.

3 голосов
/ 04 января 2012

Если, как показывает ваш комментарий, у вас есть только одна буква, за которой следуют одна или несколько цифр, вы можете сделать что-то похожее на это:

x <- c("G10", "X1231", "y14522")
# Just grab the first letter
letter <- substring(x, 1, 1)
letter
# [1] "G" "X" "y"
# Grab everything except the first character and convert to numeric
number <- as.numeric(substring(x, 2, nchar(x)))
number
#[1]    10  1231 14522
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...