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 nchar
pero 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
)?
Symbol
columna (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()
delgdtools
paquete está diseñada para esto, sin embargo, su uso no devolvió el resultado esperado. Estoy usandoLucida Console
como 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.POSIXt
para '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