我有一条包含数据的文字。文本为非英语,带有欧洲风格的数字和制表符分隔的值:
Ežeras Plotas, ha Gylis, m
Drūkšiai 4479,0 33,3
Dysnai 2439,4 6,0
我想使用readr
包中的函数将其读入R,但是我在结果数据集中遇到编码问题。
代码:
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)
答案 0 :(得分:2)
encoding = stringi::stri_enc_get()
应该可以工作。 c.f。: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
")
答案 1 :(得分:1)
尝试从data.table库获取数据。它适用于我的立陶宛语言环境。然后,您可以将其转换为as_tibble()(如果喜欢)。 默认情况下,Reader函数会将输出转换为UTF-8。在read_tsv之后考虑,您可以使用iconv()函数。此解决方案也可以正常工作。