R openxlsx包。将NA写成空白?

14

我正在使用openxlsx软件包读写Excel文件。

我注意到当我使用以下代码将表格导出到Excel文件时, write.xlsx(MyData, file="MyFile.xlsx") NAs在Excel中打开后会显示为#NUM!.

有没有选项可以将其导出为空白呢? 我尝试了一些方法,例如showNA或keepNA,但似乎都没有效果。


如果在该包中找不到参数,您可以使用另一个Excel写入包或使用类似于 df[] <- lapply(df, function(x) {x[is.na(x)] <- "";x}) 的方法将NA值转换为空白。 - Pierre L
2
我不理解为什么会被踩。我认为有些人应该知道如何做,这对其他用户可能很重要和有用。 我已经在openxlsx的github上提问了,如果没有这个选项,我将发送一个功能请求。 - skan
3个回答

10

我无法理解这个点踩。我认为有些人会知道如何使用一个选项来完成它,而不需要手动转换每个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))

这里输入图像描述


4

好问题! 我也一直在研究。 我认为默认行为是将NA值输出为空白。 但是,正如您在示例代码中展示的那样,您具有NANaN值。 列中存在一个或多个NaN值将导致该列中所有NANaN值显示为#NUM!

要解决此问题,请在导出文件之前使用NA替换文件中的所有NaN实例:

df[is.na(df)] = NA

请注意,在x为数据框时使用is.na而不是is.nan

参见:如何在巨大的数据帧中将NaN值替换为零?


0

在保存工作簿之前创建它对我很有效:

wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, 1, keepNA = T, df)
saveWorkbook(wb, file = "keepNA.xlsx")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接