我正在使用openxlsx软件包读写Excel文件。
我注意到当我使用以下代码将表格导出到Excel文件时, write.xlsx(MyData, file="MyFile.xlsx") NAs在Excel中打开后会显示为#NUM!.
有没有选项可以将其导出为空白呢? 我尝试了一些方法,例如showNA或keepNA,但似乎都没有效果。
我无法理解这个点踩。我认为有些人会知道如何使用一个选项来完成它,而不需要手动转换每个NA。
我认为这可能对其他用户很重要和有用,所以我也在openxlsx的github开发页面上提出了问题,他们回答说:
https://github.com/awalker89/openxlsx/issues/108#issuecomment-125142950
如果有人感兴趣的话,如果您更新到开发版本
devtools::install_github("awalker89/openxlsx")
你将会得到这个功能的支持。
现在的默认行为是将缺失值转换为空白。如果我们想要使用 #N/A,我们必须使用选项 keepNA = TRUE。选项 keepNA = TRUE 会保留 #N/A。
require('openxlsx')
df <- head(iris)
df[2,3] <- NA
df[2,5] <- NA
df[3,5] <- NaN
openXL(write.xlsx(df, file = tempdir()))
require('openxlsx')
df <- head(iris)
df[2,3] <- NA
df[2,5] <- NA
df[3,5] <- NaN
openXL(write.xlsx(df, file = tempdir(), keepNA = TRUE))
好问题! 我也一直在研究。 我认为默认行为是将NA
值输出为空白。 但是,正如您在示例代码中展示的那样,您具有NA
和NaN
值。 列中存在一个或多个NaN
值将导致该列中所有NA
和NaN
值显示为#NUM!
。
要解决此问题,请在导出文件之前使用NA
替换文件中的所有NaN
实例:
df[is.na(df)] = NA
请注意,在x为数据框时使用is.na
而不是is.nan
。
在保存工作簿之前创建它对我很有效:
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, 1, keepNA = T, df)
saveWorkbook(wb, file = "keepNA.xlsx")
df[] <- lapply(df, function(x) {x[is.na(x)] <- "";x})
的方法将NA值转换为空白。 - Pierre L