Ich versuche, die Symbolspalte danach zu filtern, ob sie vom Formular ist \uxxxx
Dies ist leicht visuell, das heißt, einige sehen aus wie $
, ¢
, £
, und andere wie \u058f
, \u060b
, \u07fe
.
Aber ich kann es nicht mit stringi
/ herausfindendplyr
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 ₣
Was ich versucht habe
Ich habe versucht, Variationen zu verwenden, hatte nchar
aber kein Glück
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
Frage
Wie kann ich auf das Symbol Spalte Filter für alle Zeilen der Form $
, ¢
, £
usw. (und umgekehrt für Zeilen wie \u058f
, \u060b
, \u07fe
)?
Symbol
Spalte enthalten ist (ich denke, es sollte ausreichen, aber ich kann nicht herausfinden, wie man unterscheidet - was interessant ist, weil es für menschliche Augen so leicht zu sehen ist)utf8::utf8_valid()
, dies unterscheidet jedoch möglicherweise nicht zwischen vorhandenem gültigem Unicode und Unicode, der gültig, aber nicht zugewiesen ist. Können Sie etwas näher auf das eingehen, was Sie letztendlich erreichen wollen?Antworten:
Bearbeiten:
Die Funktion
glyphs_match()
aus demgdtools
Paket ist dafür ausgelegt, hat jedoch bei Verwendung nicht das erwartete Ergebnis zurückgegeben. Ich verwendeLucida Console
als Schriftart und erhalte bei Verwendung die folgende Ausgabeglyphs_match()
. Es scheint eine Glyphe zu geben, die nicht gerendert wird, für die die Funktion jedoch zurückkehrtTRUE
. Vielleicht können andere Benutzer erklären, warum dies der Fall ist.Frühere Antwort - funktioniert möglicherweise nur unter Windows:
Abhängig von Ihrer Schriftart / Ihrem System kann es zu Abweichungen kommen. Wenn Sie beispielsweise Ihren Code ausführen, stimmt meine Ausgabe nicht mit den von Ihnen angegebenen überein:
Eine grobe Methode, um zu erfassen, ob die Glyphe vorhanden ist, ist:
So können die Glyphen gefiltert werden durch:
quelle
Verwenden Sie
as.character.POSIXt
diese Option, um Symbole zu rendern und Leerzeichen einzufügen. Unicode-Zeichen in der Form "\ uxxxx" werden als einzelnes Zeichen gedruckt und alle anderen werden größer. dann können Sie nach Länge filtern:Wenn Sie eine lange Zeichenfolge als 'Symbol' haben (z. B. "aaaaaaaaaa ₣"), wird die Polsterung erhöht und muss berücksichtigt werden, z
quelle