如何使用 data.table 的 fwrite 为 Excel 保留字符格式的数字
How to preserve numbers in a character format for Excel with data.table's fwrite
在下面的示例中,当我使用 data.table
的 fwrite
将数字以字符格式(即 .10)保存为 CSV 文件时,Excel 显示它作为数字而不是字符串。
有没有办法将数字保存为字符格式,Excel可以将其识别为字符串?
我不是只是想删除小数点前的0或保留尾随的0。
我想保持字符串完整,与它们在 R 中的显示完全相同(例如,.10,但没有引号)。
dt <- data.table(a = ".10")
fwrite(dt, "example.csv")
# The saved CSV file opened in Excel shows the number 0.1, rather than the string .10
Excel 在想读什么就读什么方面基本上是脑残。这是一种解决方法:
dat <- data.frame(aschr = c("1", "2.0", "3.00"), asnum = 1:3, hascomma = "a,b", hasnewline = "a\nb", hasquote = 'a"b"')
notnumber <- sapply(dat, function(z) is.character(z) & all(is.na(z) | !grepl("[^-0-9.]", z)))
needsquotes <- sapply(dat, function(z) any(grepl('[,\n"]', z))) & !notnumber
dat[needsquotes] <- lapply(dat[needsquotes], function(z) dQuote(gsub('"', '""', z), FALSE))
dat[notnumber] <- lapply(dat[notnumber], function(z) paste0("=", dQuote(z, FALSE)))
fwrite(dat, "iris.csv", quote = FALSE)
在 Excel 中产生以下观点。
其中大部分是预防性的:如果您非常了解自己的数据并且知道 none 数据包含逗号、引号或换行符,那么您可以去掉 needsquotes
部分. notnumber
是感兴趣的列。
最重要的是,我们通过强制将其作为 excel 公式来“欺骗”excel 使其保持为字符串。这可能不适用于其他电子表格(例如 Calc),我还没有测试过。
在下面的示例中,当我使用 data.table
的 fwrite
将数字以字符格式(即 .10)保存为 CSV 文件时,Excel 显示它作为数字而不是字符串。
有没有办法将数字保存为字符格式,Excel可以将其识别为字符串?
我不是只是想删除小数点前的0或保留尾随的0。
我想保持字符串完整,与它们在 R 中的显示完全相同(例如,.10,但没有引号)。
dt <- data.table(a = ".10")
fwrite(dt, "example.csv")
# The saved CSV file opened in Excel shows the number 0.1, rather than the string .10
Excel 在想读什么就读什么方面基本上是脑残。这是一种解决方法:
dat <- data.frame(aschr = c("1", "2.0", "3.00"), asnum = 1:3, hascomma = "a,b", hasnewline = "a\nb", hasquote = 'a"b"')
notnumber <- sapply(dat, function(z) is.character(z) & all(is.na(z) | !grepl("[^-0-9.]", z)))
needsquotes <- sapply(dat, function(z) any(grepl('[,\n"]', z))) & !notnumber
dat[needsquotes] <- lapply(dat[needsquotes], function(z) dQuote(gsub('"', '""', z), FALSE))
dat[notnumber] <- lapply(dat[notnumber], function(z) paste0("=", dQuote(z, FALSE)))
fwrite(dat, "iris.csv", quote = FALSE)
在 Excel 中产生以下观点。
其中大部分是预防性的:如果您非常了解自己的数据并且知道 none 数据包含逗号、引号或换行符,那么您可以去掉 needsquotes
部分. notnumber
是感兴趣的列。
最重要的是,我们通过强制将其作为 excel 公式来“欺骗”excel 使其保持为字符串。这可能不适用于其他电子表格(例如 Calc),我还没有测试过。