使用 R 将数字存储为 Excel 文件中的文本

Convert Number Stored as Text in Excel File Using R

我想将数据从 R 输出到一个 excel 文件,并且一直在使用 openxlsx 包。

writeDataTable 是我一直在使用的功能。问题是我希望其中一列的条目是数字和文本的混合体。由于 R 中数据框的一列必须具有所有相同类型的条目,因此所有内容都会转换为字符条目。

当我打开输出的 excel 文件时,我在数字单元格的一角看到了一个绿色的小三角形,告诉我它们是一个存储为文本的数字,并让我可以选择转换为数.

我想知道是否可以让 R 在保存文件之前创建的工作簿对象中为我转换它。

我花了很多时间在谷歌上搜索这个问题,寻找可能有帮助的不同库,但到目前为止还没有找到任何东西。我在下面有一个例子。请注意,这不是我使用的确切数据框,而是用于演示目的。

df = data.frame(A = c('Dog', '5', '7.04'), B = c('Cat', '12', '1.23'))
wb = createWorkbook()
addWorksheet(wb, "Sheet2")
writeDataTable(wb, "Sheet2", df)
output_file = "C:\Users\johndoe\documents\excel_file.xlsx"
saveWorkbook(wb, output_file)

如有任何帮助,我们将不胜感激。

这里有一个方法,但是会很慢。

### unchanged
library(openxlsx)
df = data.frame(A = c('Dog', '5', '7.04'), B = c('Cat', '12', '1.23'))
wb = createWorkbook()
addWorksheet(wb, "Sheet2")
writeDataTable(wb, "Sheet2", df)

### this is the new part
for (cn in seq_len(ncol(df))) {
  for (rn in seq_len(nrow(df))) {
    if (!is.numeric(df[rn,cn]) && !is.na(val <- as.numeric(as.character(df[rn,cn])))) {
      writeData(wb, "Sheet2", val, startCol = cn, startRow = 1L + rn)
    }
  }
}

### unchanged
saveWorkbook(wb, output_file)

要注意的是这是一次写入一个单元格。

改进方法:

  • 如果数字多于字符串,您可能希望通过使用 as.numeric 转换相关列(产生大量 NAs)来稍微扭转这一点,然后用前一个字符串一个一个地覆盖单元格的 NA 值。

  • 您可以查找要替换的单元格运行(可能在列中使用 rle),这将逐块写入而不是逐个单元格。