R使用xlsx包write.xlsx导出Excel后单元格显示#N/A的原因及解决办法
R xlsx包导出Excel时NA显示为#N/A的解决方法
问题表现
使用xlsx包的write.xlsx函数导出包含空值的R数据框时,Excel中对应空值位置会显示#N/A,预期效果为显示空白单元格。
问题截图:
示例代码:
Data1 <- structure(list(PM10 = c("13-", "19", "25", "17", NA, "22"), Hourly_Average = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA, 6L), class = "data.frame") write.xlsx(Data1, file = "PM10 Valid Stations.xlsx")
原因说明
xlsx包的write.xlsx函数默认将R中的NA值映射为Excel的#N/A错误值,因此导出后会显示该标识。
解决方法
方法一:使用函数内置参数配置(推荐)
直接在write.xlsx中添加na = ""参数,即可将所有NA值导出为空白单元格,修改后代码如下:
library(xlsx) Data1 <- structure(list(PM10 = c("13-", "19", "25", "17", NA, "22"), Hourly_Average = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA, 6L), class = "data.frame") # 新增na参数指定空值导出为空白 write.xlsx(Data1, file = "PM10 Valid Stations.xlsx", na = "")
方法二:提前替换数据框空值(兼容旧版本)
如果使用的xlsx包版本较低不支持na参数,可以先将数据框内所有NA替换为空字符串后再导出:
library(xlsx) Data1 <- structure(list(PM10 = c("13-", "19", "25", "17", NA, "22"), Hourly_Average = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)), row.names = c(NA, 6L), class = "data.frame") # 替换所有NA为空字符串 Data1[is.na(Data1)] <- "" write.xlsx(Data1, file = "PM10 Valid Stations.xlsx")
内容的提问来源于stack exchange,提问作者user15820991
相关产品推荐
相关产品推荐

