自动-“将存储为文本的数字转换为数字”

And*_*ico 5 excel r openxlsx

让我们考虑这个小例子:

df1<- data.frame(A=c(1,NA,"pvalue",0.0003),B=c(0.5,7,"I destroy","numbers all day"),stringsAsFactors = T)
Run Code Online (Sandbox Code Playgroud)

写文件:

openxlsx::write.xlsx(df1,"Test.xlsx")
Run Code Online (Sandbox Code Playgroud)

在我得到的Excel文件,17在文本的单元格。Excel具有“直觉”,即它们是存储为文本的数字。我可以手工转换它们。

如何将这些“标记的”值自动从R内部转换为数字?

在“我想要的”中,我手动将TEXT转换为Numbers。这是“我得到的”部分(红色箭头)中“绿色三角形”后面的选项。

在此处输入图片说明

@Roland的评论:重新排列为列表不起作用。

df1<- as.data.frame(cbind(A=list(1,NA_real_,"pvalue",0.0003),B=list(0.5,7,"I destroy","numbers all day")))
openxlsx::write.xlsx(df1,"Test2.xlsx")
Run Code Online (Sandbox Code Playgroud)

mt1*_*022 5

我按照@Roland 和@phiver 的建议编写了一小段代码。它从 tidy 开始data.frame(保留每个单元格的数据类型)并一一保存值:

library(openxlsx)
df1<- as.data.frame(cbind(A=list(1,NA_real_,"pvalue",0.0003),B=list(0.5,7,"I destroy","numbers all day")))

wb <- createWorkbook()
sheet.name <- 'test'
addWorksheet(wb, sheet.name)

for(i in seq_along(df1)){
    writeData(wb, sheet = sheet.name, names(df1)[i], startCol = i, startRow = 1)
    icol <- df1[[i]]
    for(j in seq_along(icol)){
        x <- icol[[j]]
        writeData(wb, sheet = sheet.name, x, startCol = i, startRow = j + 1)
    }
}
saveWorkbook(wb, file = "Test.xlsx")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

希望这适用于您的数据。