2017-06-05 2 views
1

Je souhaite définir une chaîne de caractères codée dans une autre (qui est structurée). Par exemple:R: Extraction d'une chaîne s'il s'agit d'un élément d'une liste

player <- c("Michael Jordan", "Steve Kerr", "Michael Jordan", "Toni Kukoc") 

bulls <- c("Jordan, Michael Jeffrey", "Pippen, Scottie; Harper, Ron", 
      "Rodman, Dennis", "Kerr, Steve; Longley, Luc; Kukoc, Toni") 

et de créer une nouvelle variable (par exemple, included) si les mots Michael Jordan et sont présents dans bulls[1], Steve Kerr dans bulls[2] etc. devrait produire au-dessus TRUE FALSE FALSE TRUE. Pour la généralité, les noms et les noms sont séparés par des virgules, tandis qu'un point-virgule indique plusieurs personnes dans une même entrée. Étant donné que l'objet bulls peut comporter des versions plus longues d'un nom ("Jeffrey" dans ce cas), mais pas l'inverse, je suppose que la solution pourrait nécessiter une sorte de vérification d'élément. Je veux itérer sur une longue liste, quelle est la meilleure approche?

p.s. J'ai essayé plusieurs stringr verbes, mais pas de chance jusqu'à présent (_view, _extract etc.)

Répondre

3

Essayez ceci:

require(stringr) 
mapply(function(x,y) all(x %in% y), 
    str_extract_all(player,"\\w+"),str_extract_all(bulls,"\\w+")) 
#[1] TRUE FALSE FALSE TRUE 
+0

Merci, fait exactement ce que je voulais dans l'ensemble de données plus vaste. – rfsrc