r - 从包含变音符号的 csv 创建 RSQLite - 然后使用 dplyr 读入

标签 r dplyr rsqlite

我有一个包含元音变音 (Ä/Ö) 的大型 csv 文件,我需要将其转换为 RSQLite 数据库,以便使用 dplyr 进行部分分析。但是,当我从数据库中读取数据时,变音符号无法正确再现。变成 <c4>和 Ö 变为 <d6>read.csv正确地再现变音符号。

# Create test data

indata<-data.frame(var=c('Ä', 'Ö', 'ä', 'ö', 'ÄÄ_öö'))

write.table(indata, 'test.csv', sep=';', row.names = F, quote=F)

library(DBI)
library(RSQLite)
library(dplyr)

db <- dbConnect(RSQLite::SQLite(), dbname="test") # Create empty database

RSQLite::dbWriteTable(conn = db, name = "testData", # Save csv into database
                  value = "test.csv",
                  row.names = FALSE, header = T, sep=';',
                  colClasses='character')

dbDisconnect(db)


con<-src_sqlite(path='test', create=F)

outdata<-collect(tbl(con, 'testData'))

outdata2<-read.csv('test.csv')

outdata # mangled umlauts
outdata2 # correct umlauts

如何让 RSQLite 保留变音符号?

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Finnish_Finland.1252  LC_CTYPE=Finnish_Finland.1252   
[3] LC_MONETARY=Finnish_Finland.1252 LC_NUMERIC=C                    
[5] LC_TIME=Finnish_Finland.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.5.0   RSQLite_1.1-2 DBI_0.5-1    

loaded via a namespace (and not attached):
[1] magrittr_1.5   R6_2.2.0       assertthat_0.1 tools_3.3.2    tibble_1.2     memoise_1.0.0 
[7] Rcpp_0.12.9    digest_0.6.12 

最佳答案

您拥有的大文件可能采用 Latin-1 编码,但需要采用 UTF-8 编码才能通过 RSQLite 的 CSV 导入正确处理。调整您的示例以使用 write.table(..., fileEncoding = "UTF-8") 进行双重检查。 (请注意,Windows 默认情况下没有 UTF-8 编码,大多数其他操作系统(例如 Linux 和 OS X)通常都有,因此您给出的示例可以在 Linux 和 OS X 上运行。)

使用 iconvrecode 更改文件的编码:

iconv -f latin1 in.csv > out.csv # creates new file
recode latin1..utf-8 file.csv    # in-place recoding

关于r - 从包含变音符号的 csv 创建 RSQLite - 然后使用 dplyr 读入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178918/

相关文章:

根据 R 列中的重复项删除行

r - 将包含相同变量的多列折叠为一列

r - 在单个 mutate() 语句中组合多个 cross(),同时控制 R 中的变量名称

R: sqlAppendTable 只适用于数字?

r - 是否可以直接在类 tbl_sql(或 tbl_dbi)上运行 SQL 查询?

r - 如何标准化卷积图像?我是不是该?

r - 19 位数字不会像在 R 中那样被解析

r - dplyr 过滤列是否以列表中的字符串之一开头

r - 对每个组做出不同的预测

r - 使用带有引号的值的 RSQLite 加载数据