Замена элементов в строке в R - PullRequest
1 голос
/ 25 мая 2010

У меня есть строка во фрейме данных в R, которая состоит из последовательностей неопределенной длины 0 с 1 с и 2 с в виде символов. Итак, «01», «010», «201», «102», «00012» ... такие вещи.

Я бы хотел найти способ определить, является ли последний символ в строке ЧИСЛЕННО самым большим. Важно, чтобы я сохранял строку во фрейме данных как символы для других целей. Поэтому в основном я хочу взять substr (x, nchar (x), nchar (x)) и определить, является ли оно как число наибольшим из чисел в строке символов.

Я очень растерялся, как это сделать, так как я не слишком хорошо знаком с регулярными выражениями, и мне приходится переключаться между элементами, рассматривая элементы как символы и числа.

Заранее спасибо.

~ Maureen

Ответы [ 4 ]

7 голосов
/ 25 мая 2010

Пусть df будет именем кадра данных, а строка с последовательностями строк "01", "010", "201", "102", "00012" - это No.2. Вы можете получить вектор, который отвечает на вопрос, если последний символ в строке является ЧИСЛЕННО самым большим, давая это:

sapply(strsplit(as.character(df[2,]),""),function(x) x[length(x)] >= max(x))
[1]  TRUE FALSE FALSE  TRUE TRUE
1 голос
/ 25 мая 2010

Один путь будет

p <- as.numeric(strsplit("0120102","")[[1]])
if (max(p) == p[length(p)]) {
   print("yes")
}

На самом деле вы можете игнорировать as.numeric (), так как "2"> "1"> "0":

p <- strsplit("0120102", "")[[1]]

Если вы хотите применить это к вашей data.frame A:

apply(A, c(1,2), function(z) {p<-strsplit(z, "")[[1]];(max(p) == p[length(p)])})
0 голосов
/ 25 мая 2010

Я думаю, вам лучше всего посмотреть, как работает регулярное выражение в языке R:

http://www.regular-expressions.info/rlanguage.html

Как сказал Дэн Хеберден в предыдущем посте, вам нужно будет токенизировать строку, которую вы привели в качестве примера в своем посте, и затем grep (...?) Токены для регулярного выражения "[0-9] $ ». Кстати, с помощью regex вы можете обрабатывать все как символы, поэтому вам не нужно переключаться между режимами ввода цифр и символов, за исключением случаев, когда вы берете результаты функции grep и анализируете ее в числовой форме для вашего сравнение.

0 голосов
/ 25 мая 2010

Для получения последнего числа регулярное выражение будет [0-9] $, остальная часть логики зависит от среды, в которой вы разрабатываете.

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