让我们考虑这个小例子:
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文件,1
并7
在文本的单元格。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)
我按照@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)
希望这适用于您的数据。