2017-03-10 1 views
0

J'ai un ensemble de 800 000 prêts, chacun avec un ID de prêt unique. Je veux filtrer certains critères de sorte que dans un sous-ensemble, je finis avec seulement 100 prêts. J'ai la liste de ces 100 ID de prêt et je veux vérifier que les étapes ont été faites correctement en comparant mon sous-ensemble à l'autre sous-ensemble pour voir lesquelles sont présentes/manquantes/supplémentaires. Pour simplifier mon exemple, supposons que:Comparez si un vecteur de caractère plus court à un plus long dans R pour déterminer une correspondance (et laquelle)

x <- letters 
y <- letters[2:5] 

Je veux comparer x à y pour que je verrai VRAI pour x[2:5] et false pour toutes les autres valeurs de x même si y est pas dans le même ordre que x. En d'autres termes, je veux tester si, pour chaque valeur de x, c'est l'une des valeurs de y.

Cela se sent simple, la meilleure réponse que je l'ai trouvé à ce jour est d'utiliser une boucle for(): t < - vecteur (longueur = longueur (x))

for(i in 1:length(x)){ 
    t[i] <- any(x[i]==y) 
} 

Y at-il une méthode plus simple?

+4

'x% en% y' devrait fonctionner. – JasonWang

+1

'intersect (x, y)' pourrait être utile ou 'is.element (x, y)' –

+0

@JasonWang cela fonctionne sur l'exemple simplifié, mais quand je l'ai essayé pour la première fois sur mes données de prêts, ça n'a pas marché - je Je pensais que c'était la fonction, mais je pense que ce pourrait être le format de données. Merci! – rroche

Répondre

0

Peut-être que le paquet stringr est ce que vous cherchez:

library(stringr) 

str_detect(string = "bcde", pattern = letters) 
str_detect(string = "bcde", pattern = "^b") 
str_detect(string = "bcde", pattern = "b$") 
str_detect(string = "bcde", pattern = "b|f") 
str_detect(string = "bbbe", pattern = "b{3}|b{4}") 

Le modèle à rechercher est par défaut une expression régulière qui permet à des motifs complexes comme illustré ci-dessus.