Giparra
Giparra

Reputation: 47

R: Check if strings in a vector are present in other vectors, and return name of the match

I need a tool more selective than %in% or match(). I need a code that matches a vector of string with another vector, and that returns the names of the matches.

Currently I have the following,

test <- c("country_A", "country_B", "country_C", "country_D", "country_E", "country_F") rating_3 <-  c("country_B", "country_D", "country_G", "country_K")
rating_3 <-  c("country_B", "country_D", "country_G", "country_K")
rating_4 <- c("country_C", "country_E", "country_M", "country_F)


i <- 1
while (i <= 33) {
  print(i)
  print(test[[i]])
  if (grepl(test[[i]], rating_3) == TRUE) {
    print(grepl(test[[i]], rating_3)) }
  i <- i+1
},

This should check each element of test present in rating_3, but for some reason, it returns only the position, the name of the string, and a warning;

 [1]
 [country_A]
 There were 6 warnings (use warnings() to see them)

I need to know what this piece of code fails, but I'd like to eventually have it return the name only when it's inside another vector, and if possible, testing it against several vectors at once, having it print the name of the vector in which it fits, something like

[1]
[String]
[rating_3]

How could I get something like that?

Upvotes: 2

Views: 2366

Answers (1)

m.evans
m.evans

Reputation: 697

Without a reproducible example, it is hard to determine what exactly you need, but I think this could be done using %in%:

# create reprex
test <- sample(letters,10)
rating_3 <- sample(letters, 20)

print(rating_3[rating_3 %in% test])  
[1] "r" "z" "l" "e" "m" "c" "p" "t" "f" "x" "n" "h" "b" "o" "s" "v" "k" "w" "a"
[20] "i"

Upvotes: 1

Related Questions