Stringa multibyte non valida in read.csv

Sto cercando di importare un CSV che è in giapponese. Questo codice:

url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv' x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE) 

restituisce il seguente errore:

 Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : invalid multibyte string at 'ΊOyёΓ،_񓙂̏󋵁@(TEw񍐋@փx[Xj' 

Ho provato a cambiare la codifica ( Encoding(url) <- 'UTF-8' e anche a latin1) e ho provato a rimuovere i parametri read.csv, ma ho ricevuto lo stesso messaggio “stringa multibyte non valida” in ogni caso. C’è una codifica diversa che dovrebbe essere usata, o c’è qualche altro problema?

Encoding imposta la codifica di una stringa di caratteri. Non imposta la codifica del file rappresentato dalla stringa di caratteri, che è ciò che desideri.

Questo ha funzionato per me, dopo aver provato "UTF-8" :

 x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1") 

E potresti voler saltare le prime 16 righe e leggere le intestazioni separatamente. In ogni caso, c'è ancora un po 'di pulizia da fare.

 x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1", skip=16) # get started with the clean-up x[,1] <- gsub("\u0081|`", "", x[,1]) # get rid of odd characters x[,-1] <- as.data.frame(lapply(x[,-1], # convert to numbers function(d) type.convert(gsub(d, pattern=",", replace="")))) 

Potresti aver riscontrato questo problema a causa dell’incompatibilità delle impostazioni internazionali del sistema provare a impostare le impostazioni internazionali del sistema con questo codice Sys.setlocale("LC_ALL", "C")

Il pacchetto readr dall’universo di tidyverse potrebbe aiutare.

È ansible impostare la codifica tramite l’argomento locale della funzione read_csv() utilizzando la funzione local() e il relativo argomento di codifica:

 read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv", skip = 14, local = locale(encoding = "latin1")) 

Per chi usa Rattle con questo problema Ecco come ho risolto:

  1. Per prima cosa assicurati di uscire dal rattle in modo che sia al prompt dei comandi R
  2. > library (rattle) (se non è già stato fatto)
  3. > crv$csv.encoding="latin1"
  4. > rattle()
  5. Ora dovresti essere in grado di andare avanti. cioè, importa il tuo csv> Esegui> Modello> Esegui ecc.

Questo ha funzionato per me, spero che questo aiuti un viaggiatore stanco

Ho avuto un problema simile con articoli scientifici e ho trovato una buona soluzione qui: http://tm.r-forge.r-project.org/faq.html

Utilizzando la seguente riga di codice:

 tm_map(yourCorpus, content_transformsr(function(x) iconv(enc2utf8(x), sub = "byte"))) 

converti le stringhe multibyte in codice esadecimale. Spero che aiuti.

Se il file che stai cercando di importare in R era originariamente un file Excel. Assicurati di aprire il file originale e Salva come csv e che ha corretto questo errore per me durante l’importazione in R.

Ho avuto lo stesso errore e ho provato tutto quanto sopra senza alcun risultato. Il problema è scomparso quando ho aggiornato da R 3.4.0 a 3.4.3, quindi se la tua versione R non è aggiornata, aggiornala!