Как я могу использовать функцию grep с переменными, которые содержат число (R) - PullRequest
0 голосов
/ 10 апреля 2020

Теперь я использую R. чтобы найти некоторые из своих индексов.

Я использую 2 для l oop, и все они необходимы.

Итак

for (n in 1:5){
  for(m in 1:15){
    if(length(grep(m,save))==1){ do sth
    }
  }
} 

сохранить это список, который содержит 5 списков с цифрами c, например:

[[1]] [1] 1 4 8

[[2]] [2] 2 5 9

[[3]] [1] 3 6 10

[[4]] [1] 11 12

[[5]] [1] 7 13 15

Теперь я хочу найти совпадение числа в o с цифрой c в сохранении

Что я имею в виду, когда o равно 1,4,8, тогда оно совпадает, когда n равно 1 ! (список 1), но проблема в том, что когда m равно 1, а n равно 4 (список 4) 11, 12 также можно найти, поскольку оно содержит ровно '1' в 11, 12!

Но я хочу только точно найти «1», а не «11», «121», «333331» .. вот так.

Как я могу сделать это с моим кодом ..? Для меня требуется индексирование с использованием двух отдельных процедур.

Так что, если вы знаете какой-либо ответ по этому поводу, пожалуйста, дайте мне ответ. Спасибо

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Я не понимаю вашего вопроса в полной мере. Я рекомендую предоставить воспроизводимый пример .

Тем не менее, я предполагаю, что здесь вы не правильно подбираете цифры. Попробуйте более конкретное c регулярное выражение. Смотрите этот шпаргалку от RStudio. Также я рекомендую пакет {stringr}.

library(stringr)

# extract 1 digit only, first matching
str_extract("1aa33", "\\d{1}")
>> 1

# extract 1 digit at the end of string
str_extract("1aa33", "\\d{1}$")
>> 3

# # extract 1 or more digits at the end of string
str_extract("1aa33", "\\d+$")
>> 33
0 голосов
/ 10 апреля 2020

Это, конечно, можно оптимизировать, но это трудно, не зная больше контекста. Вы также говорите, что вам нужно два цикла, поэтому, не меняя ничего, вы можете получить ожидаемое поведение, добавив границы слов в grep, если я правильно понял.

for (n in 1:5){
   for(m in 1:15){
    if(length(grep(paste0('\\b', m, '\\b'),save))==1){ 
      #do something
    }
  }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...