Чтение неанглийского текста как фрейма данных с использованием пакета readr (проблема с кодировкой) - PullRequest
0 голосов
/ 14 октября 2018

У меня есть текст с данными.Текст не по-английски с номерами в европейском стиле и значениями, разделенными табуляцией:

Ežeras  Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0

Я хочу прочитать его в R, используя функции из пакета readr, но я сталкиваюсь с проблемой кодировкинабор данных.

Код:

Sys.setlocale(locale = "Lithuanian")

library(readr)

read_tsv(locale = locale(decimal_mark = ","),
"Ežeras     Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0
")

Результат:

# A tibble: 2 x 3
  `E\xfeeras`      `Plotas, ha` `Gylis, m`
  <chr>                   <dbl>      <dbl>
1 "Dr\xfbk\xf0iai"        4479        33.3
2 Dysnai                  2439.        6  

Я также пытался encoding = "native" и encoding = "unknown" внутри функции locale(), ноэти параметры не распознаются.

Я могу записать данные в текстовый файл и прочитать этот файл, а также использовать data.table::fread(), но это не те параметры, которые я ищу.


devtools::session_info()

Session info --------------------------------------------------------------------
 setting  value                       
 version  R version 3.5.1 (2018-07-02)
 system   x86_64, mingw32             
 ui       RStudio (1.1.456)           
 language (EN)                        
 collate  Lithuanian_Lithuania.1257   
 tz       Europe/Helsinki             
 date     2018-10-15                  

Packages ------------------------------------------------------------------------
 package    * version    date       source                          
 assertthat   0.2.0      2017-04-11 CRAN (R 3.5.0)                  
 base       * 3.5.1      2018-07-02 local                           
 cli          1.0.1      2018-09-25 CRAN (R 3.5.1)                  
 compiler     3.5.1      2018-07-02 local                           
 crayon       1.3.4      2017-09-16 CRAN (R 3.5.0)                  
 datasets   * 3.5.1      2018-07-02 local                           
 devtools     1.13.6     2018-06-27 CRAN (R 3.5.1)                  
 digest       0.6.18     2018-10-10 CRAN (R 3.5.1)                  
 fansi        0.4.0      2018-10-05 CRAN (R 3.5.1)                  
 graphics   * 3.5.1      2018-07-02 local                           
 grDevices  * 3.5.1      2018-07-02 local                           
 hms          0.4.2.9001 2018-07-25 Github (tidyverse/hms@979286f)  
 memoise      1.1.0      2017-04-21 CRAN (R 3.5.0)                  
 methods    * 3.5.1      2018-07-02 local                           
 pillar       1.3.0      2018-07-14 CRAN (R 3.5.1)                  
 pkgconfig    2.0.2      2018-08-16 CRAN (R 3.5.1)                  
 R6           2.3.0      2018-10-04 CRAN (R 3.5.1)                  
 Rcpp         0.12.19    2018-10-01 CRAN (R 3.5.1)                  
 readr      * 1.1.1      2017-05-16 CRAN (R 3.5.1)                  
 rlang        0.2.2      2018-08-16 CRAN (R 3.5.1)                  
 rstudioapi   0.8        2018-10-02 CRAN (R 3.5.1)                  
 stats      * 3.5.1      2018-07-02 local                           
 tibble       1.4.2      2018-01-22 CRAN (R 3.5.0)                  
 tools        3.5.1      2018-07-02 local                           
 utf8         1.1.4      2018-05-24 CRAN (R 3.5.0)                  
 utils      * 3.5.1      2018-07-02 local                           
 withr        2.1.2      2018-09-05 Github (jimhester/withr@8b9cee2)
 yaml         2.2.0      2018-07-25 CRAN (R 3.5.1)   

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

encoding = stringi::stri_enc_get() должно работать.ср: https://stackoverflow.com/a/46999569/5397672

read_tsv(locale = locale(decimal_mark = ",",
                         encoding = stringi::stri_enc_get()),
         "Ežeras     Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0
")
0 голосов
/ 15 октября 2018

Попробуйте фред из библиотеки data.table.Это работает с литовским языком для меня.Затем вы можете преобразовать в as_tibble (), если хотите.Функция Readr по умолчанию преобразует вывод в UTF-8.Мысль после read_tsv вы можете использовать функцию iconv ().Это решение также отлично работает.

...