J'essaie de filtrer la colonne Symbole selon qu'elle est de la forme \uxxxx
C'est facile visuellement, qui est, certains ressemblent $
, ¢
, £
, et d' autres comme \u058f
, \u060b
, \u07fe
.
Mais je n'arrive pas à le comprendre en utilisant stringi
/dplyr
library(dplyr)
library(stringi)
df <- structure(list(Character = c("\\u0024", "\\u00A2", "\\u00A3",
"\\u00A4", "\\u00A5", "\\u058F", "\\u060B", "\\u07FE", "\\u07FF",
"\\u09F2", "\\u09F3", "\\u09FB", "\\u0AF1", "\\u0BF9", "\\u0E3F",
"\\u17DB", "\\u20A0", "\\u20A1", "\\u20A2", "\\u20A3"),
Symbol = c("$", "¢", "£", "¤", "¥", "\u058f", "\u060b", "\u07fe", "\u07ff",
"৲", "৳", "\u09fb", "\u0af1", "\u0bf9", "฿", "៛", "₠",
"₡", "₢", "₣")), row.names = c(NA, 20L), class = "data.frame")
Character Symbol
1 \\u0024 $
2 \\u00A2 ¢
3 \\u00A3 £
4 \\u00A4 ¤
5 \\u00A5 ¥
6 \\u058F \u058f
7 \\u060B \u060b
8 \\u07FE \u07fe
9 \\u07FF \u07ff
10 \\u09F2 ৲
11 \\u09F3 ৳
12 \\u09FB \u09fb
13 \\u0AF1 \u0af1
14 \\u0BF9 \u0bf9
15 \\u0E3F ฿
16 \\u17DB ៛
17 \\u20A0 ₠
18 \\u20A1 ₡
19 \\u20A2 ₢
20 \\u20A3 ₣
Ce que j'ai essayé
J'ai essayé d'utiliser des variations nchar
mais je n'ai pas eu de chance
df$Symbol %>% nchar
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
df$Symbol %>% stri_unescape_unicode %>% nchar
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
df$Symbol %>% stri_escape_unicode %>% nchar
# [1] 1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
Question
Comment puis - je filtrer sur la colonne Symbole pour toutes les lignes de la forme $
, ¢
, £
etc (et inversement pour les lignes aiment \u058f
, \u060b
, \u07fe
)?
Symbol
colonne (je pense que cela devrait être suffisant, mais je ne peux pas savoir comment distinguer - ce qui est intéressant car il est si facile à voir pour les yeux humains)utf8::utf8_valid()
mais cela peut ne pas faire la distinction entre unicode valide existant et unicode qui est valide mais non attribué. Pouvez-vous développer un peu ce que vous essayez finalement de réaliser?Réponses:
Éditer:
La fonction
glyphs_match()
dugdtools
package est conçue pour cela, cependant, son utilisation n'a pas tout à fait renvoyé le résultat attendu. J'utiliseLucida Console
comme police et j'obtiens la sortie suivante lors de l'utilisationglyphs_match()
. Il semble y avoir un glyphe qui n'est pas rendu mais pour lequel la fonction revientTRUE
. Peut-être que d'autres utilisateurs peuvent expliquer pourquoi c'est le cas.Réponse antérieure - ne peut fonctionner que sous Windows:
Il y aura des variations en fonction de votre police / système, par exemple, lors de l'exécution de votre code, ma sortie ne correspond pas à ce que vous avez fourni:
Mais une façon grossière de capturer si le glyphe existe est:
Ainsi, les glyphes peuvent être filtrés par:
la source
Utilisez
as.character.POSIXt
pour «restituer» les symboles et ajouter des espaces. Les caractères Unicode sous la forme "\ uxxxx" seront imprimés comme un seul caractère et tous les autres seront plus grands; alors vous pouvez filtrer selon la longueur:Si vous avez une longue chaîne comme 'symbole' (par exemple "aaaaaaaaaa ₣") le remplissage sera augmenté et devra être pris en compte par exemple
la source