如何为导出的csv文件R在fwrite()中指定编码?

时间:2018-09-28 11:45:36

标签: r fwrite

由于 $scope.$parent.$parent无法应用编码参数,如何导出特定编码的csv文件的速度与fwrite()一样快? (fwrite()是迄今为止我认可的最快的功能)

fwrite()

4 个答案:

答案 0 :(得分:2)

如果您在R中工作,
尝试将其作为工作方法:

# You have DT   
# DT is a data.table / data.frame   
# DT$text contains any text data not encoded with 'utf-8'       

library(data.table)   
DT$text <– enc2utf8(DT$text) # it forces underlying data to be encoded with 'utf-8'   
fwrite(DT, "DT.csv", bom = T) # Then save the file using ' bom = TRUE ' 

希望有帮助。

答案 1 :(得分:1)

您应该发布一个可复制的示例,但是我想您可以通过确保DT中的数据位于R中的UTF-8中,然后将每列的编码设置为“未知”来实现。然后,R会在您写出数据时假定数据是以本机编码进行编码的。

例如,

DF <- data.frame(text = "á", stringsAsFactors = FALSE)
DF$text <- enc2utf8(DF$text) # Only necessary if Encoding(DF$text) isn't "UTF-8"
Encoding(DF$text) <- "unknown"
data.table::fwrite(DF, "DF.csv")

如果DF的列是因子,则需要先将它们转换为字符向量,然后才能起作用。

答案 2 :(得分:1)

我知道有些人已经回答了,但是我想使用user2554330的回答来提供一个更全面的解决方案。

# Encode data in UTF-8
for (col in colnames(DT)) {
    names(DT) <- enc2utf8(names(DT)) # Column names need to be encoded too
    DT[[col]] <- as.character(DT[[col]]) # Allows for enc2utf8() and Encoding()
    DT[[col]] <- enc2utf8(DT[[col]]) # same as users' answer
    Encoding(DT[[col]]) <- "unknown"
}

fwrite(DT, "DT.csv", bom = T)

# When re-importing your data be sure to use encoding = "UTF-8"
DT2 <- fread("DT.csv", encoding = "UTF-8") 
# DT2 should be identical to the original DT

这应该适用于数据表上任何位置的所有UTF-8字符

答案 3 :(得分:0)

在撰写本文时,fwrite不支持强制编码。我有一种解决方法,但是比我想要的更钝。例如:

select  e.first_name, e.last_name, e.manager_id 
from employees e 
inner join employees m on e.manager_id = m.employee_id;

第一行将仅将数据表的标头保存到CSV,默认为UTF-8,并具有要求的字节顺序标记,以使Excel知道文件已编码为UTF-8。然后, fwrite 语句使用append选项将其他行添加到原始CSV。这样可以保留 write_excel_csv 的编码,同时可以最大程度地提高写入速度。