Estoy tratando de filtrar la columna Símbolo en función de si es de la forma \uxxxx
Esto es fácil visualmente, es decir, algunas se ven como $, ¢, £, y otros como \u058f, \u060b, \u07fe.
Pero parece que no puedo entenderlo usando 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 ₣
Lo que he intentado
He intentado usar variaciones ncharpero no he tenido suerte
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
Pregunta
¿Cómo se filtran en la columna de símbolo para todas las filas de la forma $, ¢, £etc (ya la inversa para las filas como \u058f, \u060b, \u07fe)?

Symbolcolumna (siento que debería ser suficiente, pero no puedo entender cómo distinguirlo, lo cual es interesante porque es muy fácil de ver para los ojos humanos)utf8::utf8_valid()pero esto puede no distinguir entre unicode válido existente y unicode que es válido pero no asignado. ¿Puedes ampliar un poco lo que en última instancia estás tratando de lograr?Respuestas:
Editar:
La función
glyphs_match()delgdtoolspaquete está diseñada para esto, sin embargo, su uso no devolvió el resultado esperado. Estoy usandoLucida Consolecomo mi fuente y obtengo el siguiente resultado cuando lo usoglyphs_match(). Parece que hay un glifo que no se representa pero para el cual la función regresaTRUE. Quizás otros usuarios puedan explicar por qué ese es el caso.Respuesta anterior: puede que solo funcione en Windows:
Habrá variaciones dependiendo de su fuente / sistema, por ejemplo, cuando ejecuto su código, mi salida no coincide con lo que ha proporcionado:
Pero una forma cruda de capturar si el glifo existe es:
Entonces los glifos se pueden filtrar por:
fuente
Úselo
as.character.POSIXtpara 'renderizar' símbolos y rellenar con espacios. Los caracteres Unicode en la forma "\ uxxxx" se imprimirán como un solo carácter y todos los demás serán más grandes; entonces puedes filtrar según la longitud:Si tiene una cadena larga como 'símbolo' (por ejemplo, "aaaaaaaaaa ₣"), el relleno se incrementará y deberá tenerse en cuenta, por ejemplo
fuente