[英]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.