简体   繁体   中英

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?

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"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM