L'extraction des numéros uniques de chaîne dans la R
J'ai une liste de chaînes de caractères qui contiennent des caractères aléatoires tels que:
list=list()
list[1] = "djud7+dg[a]hs667"
list[2] = "7fd*hac11(5)"
list[3] = "2tu,g7gka5"
Je voudrais savoir les nombres qui sont présents au moins une fois (unique()
) dans cette liste. La solution de mon exemple est:
solution: c(7,667,11,5,2)
Si quelqu'un a une méthode qui ne considère pas 11 comme des "onze", mais comme "l'un et l'autre", il serait également utile. La solution à cette condition serait:
solution: c(7,6,1,5,2)
(J'ai trouvé ce post sur un sujet connexe: L'extraction des numéros de vecteurs des chaînes)
Vous devez vous connecter pour publier un commentaire.
Pour la deuxième réponse, vous pouvez utiliser
gsub
pour supprimer tous les éléments de la chaîne qui n'est pas un numéro, puis diviser la chaîne comme suit:Pour la première réponse, de la même manière à l'aide de
strsplit
,PS: ne pas le nom de votre variable
list
(comme il y a une fonction intégrée de fonctionlist
). Je l'ai appelé vos données commell
.Voici encore une autre réponse, celui-ci à l'aide de
gregexpr
pour trouver les numéros, etregmatches
de les extraire:Une solution à l'aide de stringi
Et que c'est votre première solution
Pour la deuxième solution, je l'utiliserais
substr
:stri_extract_all_regex()
viennent?Vous pouvez utiliser
?strsplit
(comme suggéré dans @Arun réponse dans L'extraction des numéros de vecteurs (de chaînes)):Un
stringr
solution avecstr_match_all
et les canalisations des opérateurs. Pour la première solution:Deuxième solution:
(Note: j'ai aussi appelé la liste
ll
)Utilisation strsplit à l'aide de modèle comme l'inverse de chiffres: 0-9
Pour l'exemple que vous avez fournies, faites ceci:
Alors simplement prendre une union de tous les ensembles " `dans la liste, comme suit:
Alors vous n'avez qu'à retirer la chaîne vide.
strsplit
est vectorisée. Vous pourriez/devriez éviter d'utiliser des boucles enunlist
ing OP de données.Reduce
avecunion
(essentiellement en boucle) ici, sera également beaucoup de temps sur les listes énormes (unique
etunlist
serait beaucoup plus rapide).Découvrez la
str_extract_numbers()
fonction de lastrex
paquet.Créé sur 2018-09-03 par le reprex paquet (v0.2.0).