Аргумент 'pattern' имеет длину> 1, и только первый элемент будет использоваться числовым grepl - PullRequest
0 голосов
/ 21 декабря 2018

Я продолжаю получать это предупреждение, используя grepl с факторной переменной в выражении ifelse: «аргумент 'pattern' имеет длину> 1, и будет использоваться только первый элемент"

У меня есть эти переменные: x7 иY7.x7 - это символьная переменная, которая является взаимоисключающей, y7 - это факторная переменная, которая не является взаимоисключающей и, таким образом, представляет собой строку чисел (от 0 до 9).

x7 может заканчиваться любой буквой, но я хочу ограничиться равным Z или J. Если он равен Z, я хочу, чтобы y7 заканчивался любым из этих значений в строке (0, 1,2, 3, 4).

Вот что я написал:

test = ifelse( ( x7 %in% c( "Z" ) & grepl( c( 0 , 1 , 2 , 3 , 4 ) , y7 ) ) | x7 %in% c( "J" ) , 1 , 0 ) 

Итак, создаем фиктивную переменную (test), если x7 - Z, а y7 - 0: 4 ИЛИ, если x7 - J, это 1. Все остальныебудет 0.

Я продолжаю получать это предупреждение: «аргумент« шаблон »имеет длину> 1 и будет использоваться только первый элемент», то есть в z7 рассматривается только 0, а не 0: 4.

Итак, если это «123» или «246», он не будет считать их, потому что он не начинается с 0. Но он будет считать, если это «014» или «056».Мне нужно, чтобы он подсчитал все последовательности, которые включают любое из чисел от 0 до 4, а не только те, которые начинаются с 0.

Если любое из этих значений (0, 1, 2, 3, 4) находится вбудет создана строка-пустышка, равная 1.

1 Ответ

0 голосов
/ 21 декабря 2018

In grepl:

grepl(c(0, 1, 2, 3, 4) , c(1, 2))

Первый аргумент pattern должен иметь длину 1, в вашем случае - длину 5. Для сопоставления цифр от 0 до 4 вы можете сделать:

grepl("[0-4]", c("0", "4", "5", "9"))
# [1]  TRUE  TRUE FALSE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...