簡體   English   中英

如何在 fwrite() 中指定編碼以導出 csv 文件 R?

[英]How can i specify encode in fwrite() for export csv file R?

由於fwrite()不能應用編碼參數,我怎樣才能像fwrite()一樣快地導出特定編碼的 csv 文件? fwrite()是迄今為止我確認中最快的函數)

fwrite(DT,"DT.csv",encoding = "UTF-8")
Error in fwrite(DT, "DT.csv", encoding = "UTF-8") : 
  unused argument (encoding = "UTF-8")

您應該發布一個可重現的示例,但我想您可以通過確保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", bom = TRUE)

如果DF的列是因子,則需要將它們轉換為字符向量才能起作用。

在撰寫本文時, fwrite 不支持強制編碼。 我使用了一種解決方法,但它比我想要的要遲鈍一些。 對於您的示例:

readr::write_excel_csv(DT[,0],"DT.csv")
data.table::fwrite(DT,file = "DT.csv",append = T)

第一行將僅將數據表的標題保存到 CSV,默認為 UTF-8,並帶有讓 Excel 知道文件是 UTF-8 編碼所需的字節順序標記。 然后fwrite語句使用 append 選項向原始 CSV 添加額外的行。 這保留了write_excel_csv的編碼,同時最大限度地提高了寫入速度。

如果你在 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 ' 

希望有幫助。

我知道有些人已經回答了,但我想使用 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

這應該適用於 data.table 上任何位置的任何和所有 UTF-8 字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM