J'essaie d'extraire la valeur de l'argent et sa monnaie d'une colonne de récits. Cependant, les formats de devises dans les récits sont en désordre.
J'ai essayé gsub () mais je ne sais pas comment le personnaliser pour faire face aux cas de différence. p>
entrée: p> Sortie attendue: p>
3 Réponses :
Je suggérerais d'utiliser Expressions régulières et Le premier problème est que vous avez un signe de dollar, qui n'est pas une monnaie explicite. Si vous voulez supposer que le signe dollar est puis crée un vecteur de caractères de monnaies valides, que vous pouvez ajouter au besoin: p > puis configurez vos expressions régulières: p> ce qui précède trouvera l'une des devises valides. P> str_extract_all () code> de Le package stringr code> (une partie du Tairyverse code>). value <- str_extract_all(x, regexAmount) %>% unlist %>% as.numeric
## [1] 8.5 130.0 11.0 33.0
currency <- str_extract_all(, regexCurrency) %>% unlist
## [1] "USD" "USD" "GBP" "EUR"
strapply code> extrait les correspondances des groupes de capture (parentent des parties parenthèses de motif) du motif PAT code> dans les chaînes de caractères Word code> (premier Argument) et saisit les groupes de capture comme des arguments distincts de la fonction (troisième argument - la fonction peut être exprimée dans la notation de formule avec le corps de la fonction sur le côté droit de la tilde). Il renvoie la sortie de la fonction. library(gsubfn)
pat <- "(USD|GBP|EUR|\\$) *([0-9.]+)"
currency <- strapply(words, pat, ~ sub("\\$", "USD", ..1), simplify = TRUE)
value <- strapply(words, pat, ~ as.numeric(..2), simplify = TRUE)
J'ai eu une erreur en utilisant cette méthode: Erreur dans si (Nchar (s)> 0 && Substring (S, 1, 1) == "\ 002") {: valeur manquante où véritable / faux nécessaire
Le code dans la réponse avec mots code> de la question fonctionne pour moi. En général, lorsque vous faites face à un message d'erreur dans R montrant le texte du message d'erreur est rarement suffisant pour déterminer quel est le problème. En général, vous devez expliquer exactement comment quelqu'un d'autre peut reproduire le message d'erreur. Essayez d'abord de copier et coller mots code> de la question dans une session fraîche R, puis copiez et collez le code de la réponse ci-dessus. Si cela fonctionne, nous ne savons pas ce que vous avez fait pour obtenir l'erreur afin de l'expliquer de manière reproductible.
in base em> Vous pouvez d'abord changer $ code> à USD code> avec gsub code>. Ensuite, extraire des correspondances pour monnaie code> et code> avec un regreg code> à l'aide de REGEXPR code> et REGMATCHES code>. Maintenant, formez-vous maintenant ces correspondances, vous pouvez extraire la valeur code> code> et de nouveau code> avec gsub code>. tt <- gsub("\\$", "USD", words)
tt <- regmatches(tt, regexpr("\\b(USD|GBP|EUR) *[0-9.]+", tt))
(value <- as.numeric(gsub("[^0-9.]", "", tt)))
#[1] 8.5 130.0 11.0 33.0
(currency <- gsub("[0-9. ]", "", tt))
#[1] "USD" "USD" "GBP" "EUR"
Sauf si quelqu'un a déjà écrit un paquet pour cela. Vous devez utiliser une expression régulière pour correspondre au type de devise et au montant.