Самый быстрый способ получить вектор класса из имен в R - PullRequest
3 голосов
/ 11 декабря 2010

Если у меня следующий вектор в R (мои уровни, очевидно, A, B и C)

c("A_1", "A_2", "B_1", "C_1", "C_2")

Какой самый эффективный способ преобразовать его в вектор класса с числами вроде

c(1, 1, 2, 3, 3)

Я чувствую, что это должен быть однострочник (вероятно, комбинация фактора и grep), но он не смог придумать один.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 11 декабря 2010

Простое решение будет:

x <- c("A_1", "A_2", "B_1", "C_1", "C_2")


x.out <- as.numeric(factor(substr(x, 0,1)))

Если ваши данные более разнообразны, дайте мне знать, и мы сможем сделать его более надежным решением.

2 голосов
/ 11 декабря 2010

Существует более общий подход к регулярным выражениям, который не требует указания ширины ведущей строки:

Либо удалите все, что включает, и после подчеркивания:

> as.numeric(factor(sub("_.+", "" , x)))
[1] 1 1 2 3 3

Или выберите символы, которые предшествуют подчеркиванию (так как в регулярном выражении R части шаблонов, заключенные в скобки, могут указываться в строке замены как "\\", за которым следует цифра):

> as.numeric(factor(sub("(^.+)_.+$", "\\1" , x)))
[1] 1 1 2 3 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...