我想将数据从 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)
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。
这是一种方法,但速度会非常慢。
### 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)
Run Code Online (Sandbox Code Playgroud)
问题是这是一次写入一个单元格。
改善这一点的方法:
如果数字多于字符串,您可能需要通过转换相关列as.numeric(生成大量s)来稍微扭转这一点,然后用前NA一个字符串逐一覆盖单元格的值。NA
您可以查找要替换的单元格运行(可能rle在列中使用),这将逐块写入而不是逐个单元写入。
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |