微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数 write.table() 在导出到 excel 时将我的字符列转换为数字我怎样才能防止这种情况?

如何解决函数 write.table() 在导出到 excel 时将我的字符列转换为数字我怎样才能防止这种情况?

我有一个类似的数据框:

  Material  c1  c2  c3  c4  c5  c6
1   0111    30  44  24  25  52  27
2   0112    19  70  93  23  68  100
3   1124    22  NA  79  18  133 143
4   2389    79  NA  NA  81  60  NA
5   3480    57  8   95  62  NA  90
6   0134    350 60  50  302 44  4

这里我强制为字符类型,但在我的真实数据框中它已经是。

df['Material']=as.character(df['Material'])

sapply(df,mode)

write.table(df,paste(".\\exports\\","dummy.csv",sep = ""),sep = ";",dec = ",",row.names=F)

问题是,当我导出到 excel 时,我的 Material 列变成了数字,并且我在开头丢失了作为材料代码描述一部分的 0。我的行被排序,我希望它们处于原始位置。有没有办法防止这种情况发生?导出时要保持我的材料列作为字符?

如果您想复制它,我尝试创建一个虚拟版本:

df <- data.frame(Material = c('0111','0112','1124','2389','3480'),actual_202009 = c(30,19,22,79,57),actual_202010 = c(44,70,NA,8),actual_202011 = c(24,93,95),pred_202009 = c(25,23,18,81,62),pred_202010 = c(52,68,133,60,NA),pred_202011 = c(27,100,143,90))

解决方法

如评论中所述:

这有效。

library(openxlsx)
write.xlsx(df,file = "dummy.xlsx")

尽管 csv 中的数据在 Material 列周围有引号,但 excel 喜欢为你思考而不是尊重字符引号。现在您可以将 libreoffice 与 calc 一起使用。这将打开文本导入选项,您可以在其中告诉它第一列是文本,它将保留材料列的正确格式。

但最简单的就是使用上面的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。