Print unicode-string i R

Jeg ind i en tekst-streng i .csv fil , der indeholder unicode-symboler som: \U00B5 g/dL.
I .csv filer samt læse i R data frame:

Print unicode-string i R

test=read.csv("test.csv")

Print unicode-string i R

\U00B5 ville give de mikro-tegn – æ. R læse det i data-fil, som det er (\U00B5). Men når jeg udskriver den streng, det viser, som \\U00B5 g/dL.

Alternativt kan du manuelt indtaste koden virker fint.

varname <- c("a", "b", "c")
labels <- c("A \U00B5 g/dL", "B \U00B5 g/dL", "C \U00B5 g/dL")
df <- data.frame(varname, labels)
test <- data.frame(varname, labels)
test
#  varname   labels
#  1       a A µ g/dL
#  2       b B µ g/dL
#  3       c C µ g/dL

Jeg spekulerer på, hvordan jeg kunne slippe af escape-tegn \ i dette tilfælde, og har det udskrive symbol.
Eller, hvis der en anden måde at printe ud symbolet i R.

Mange tak for denne hjælp!

Når du siger, Men når jeg udskriver den streng, det viser, som \\U00B5 g/dL., hvor er du udskriver den streng?
Det forekommer mig, at problemet er mindre om udskrivning af unicode-tegn korrekt, end det er om korrekt læsning bogstavelig unicode-tekst fra en fil og have det fortolket som et unicode-strenge.
Hvis du indkode filen med UTF-8 som @RichardScriven antyder, kan du bruge fileEncoding="UTF-8", allowEscapes=T i din opfordring til read.csv().
Hvis du har bogstaveligt talt “\U00B5 g/dL” i en tekst-fil, der er ikke Unicode. Det er bare en ASCII-skråstreg efterfulgt af bogstaver og tal. Det er uklart for mig nøjagtigt, hvad du har i din csv-fil. Det ville være rart, hvis du har angivet en reproducerbar eksempel (specifikt viser byte af filen)
Ja. Det er problemet! Hvis jeg manuelt at indtaste det, det virker fint. Men hvis jeg importere fra en .csv fil. Det ville tilføje ` \` .

OriginalForfatteren outboundbird | 2015-03-25

1 svar

  1. 38

    Godt, først forstå, at visse tegn i R skal være undgået, hvis de er uden for standard ASCII-tegn. Typisk sker dette med en ” \ ” – tegn. Det er derfor, du er nødt til at undslippe denne karakter, når du skriver en streng i R:

    a <- "\" # error
    a <- "\\" # ok.

    “\U” er en speciel indikator for unicode-tegnkoder. Bemærk, at der ikke er nogen skråstreger eller U s i selve strengen, når du bruger denne flygter. Det er bare en genvej til en bestemt karakter. Bemærk:

    a <- "\U00B5"
    cat(a)
    # µ
    grep("U",a)
    # integer(0)
    nchar(a)
    # [1] 1

    Dette er meget anderledes end den streng

    a <- "\\U00B5"
    cat(a)
    # \U00B5
    grep("U",a)
    # [1] 1
    nchar(a)
    # [1] 6

    Normalt, når du importerer en tekst-fil, du vil indkode ikke-ASCII-tegn, der, uanset i hvilken kodning, der bruges af fil (i UTF-8, eller Latin-1 er den mest almindelige). De har en særlig byte til at repræsentere disse tegn. Det er ikke “normalt” for en tekst-fil til at have en ASCII-escape-sekvens for unicode-tegn. Dette er grunden til, at R ikke forsøger at konvertere “\U00B5” til en unicode-tegn, fordi det forudsætter, at hvis du havde ønsket en unicode-tegn, du ville har bare brugt det direkte.

    Den nemmeste måde at re-interpet din ASCII-tegn værdier ville være at bruge den stringi pakke. For eksempel

    library(stringi)
    a <- "\\U00B5"
    stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))

    (den eneste fangst er, at vi er nødvendig for at konvertere “\U” til den mere almindelige “\u”, så de fungerer korrekt anerkendt escape). Du kan gøre dette til din importerede data med

    test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))

    OriginalForfatteren MrFlick

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Copyright © 2019 Animation Program. All rights reserved.