首页 > 解决方案 > 如何仅将带有数字的单元格从R中数据框中的字符转换为数字并保存到excel文件

问题描述

我只想将具有数字的单元格转换为数字并将其保存到 excel 文件中。

例如,数据框与此类似。

df <- data.frame(row1 = c('agri','1','-', NA),row2 = c('3','import','6', 'food'), stringsAsFactors = F)

在我将它保存到一个excel文件之后

openxlsx::write.xlsx(df, "df.xlsx", row.names=FALSE)

excel文件中的数字是字符。

在此处输入图像描述

这是因为在数据框中,这些列是“char”。

> str(df)

'data.frame':4 obs。2个变量:

$ row1: chr "agri" "1" "-" 不适用

$ row2: chr "3" "import" "6" "food"

我尝试了 mutate() 和 transform()。但这些仅适用于整个专栏。

可以在R中做到吗?

任何帮助深表感谢。

标签: rexceldataframe

解决方案


迟到的评论/回复。

tldr; 我不认为这是可能的。

openxlsx确实允许单元格级别的格式(通过addStyle),并且您可能很想addStyle为不同的单元格定义不同的格式 à la

library(openxlsx)
wb <- createWorkbook()

addWorksheet(wb, "sheet1")
writeData(wb, sheet = 1, df)

addStyle(wb, sheet = 1, createStyle(numFmt = "TEXT"), row = 1, col = 1)
addStyle(wb, sheet = 1, createStyle(numFmt = "NUMBER"), row = 3, col = 1)

saveWorkbook(wb, "example.xlsx", overwrite = TRUE)

检查 Excel 文件显示,尽管 Excel 报告单元格 (row=3, col=1) 具有“数字”类别,但该单元格实际上仍属于“文本”类别(如小警告三角形所示)。

我不能说这是否是一个错误openxlsx

在我个人看来,这是为了更好。在一列中混合不同类型的数据是不好的做法,违背了 R 的基本数据结构的基本原理(因为 / 的元素/列的条目listdata.frame必须具有相同的数据类型),并且与“整洁数据”相反。


推荐阅读