函数 write.table() 在导出到 excel 时将我的字符列转换为数字。我怎样才能防止这种情况发生?
Function write.table() is converting my character column to numeric when exporting to excel. How can I prevent this?
我有一个类似的数据框:
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,它是 material 代码描述的一部分。我的行得到排序,我想让它们在原来的位置。有没有办法防止这种情况发生?要在导出时将我的 Material 列保留为字符吗?
如果您想复制它,我尝试创建一个虚拟版本:
df <- data.frame(Material = c('0111','0112','1124','2389','3480'),
actual_202009 = c(30,19,22,79,57),
actual_202010 = c(44,70,NA,NA,8),
actual_202011 = c(24,93,79,NA,95),
pred_202009 = c(25,23,18,81,62),
pred_202010 = c(52,68,133,60,NA),
pred_202011 = c(27,100,143,NA,90))
如评论中所述:
这有效。
library(openxlsx)
write.xlsx(df, file = "dummy.xlsx")
即使您的 csv 中的数据在 Material 列周围有引号,excel 还是喜欢为您考虑而不尊重字符引号。现在您可以将 libreoffice 与 calc 一起使用。这将打开文本导入选项,您可以在其中告诉它第一列是文本,它将保留 Material 列的正确格式。
但最简单的就是使用上面的代码。
我有一个类似的数据框:
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,它是 material 代码描述的一部分。我的行得到排序,我想让它们在原来的位置。有没有办法防止这种情况发生?要在导出时将我的 Material 列保留为字符吗?
如果您想复制它,我尝试创建一个虚拟版本:
df <- data.frame(Material = c('0111','0112','1124','2389','3480'),
actual_202009 = c(30,19,22,79,57),
actual_202010 = c(44,70,NA,NA,8),
actual_202011 = c(24,93,79,NA,95),
pred_202009 = c(25,23,18,81,62),
pred_202010 = c(52,68,133,60,NA),
pred_202011 = c(27,100,143,NA,90))
如评论中所述:
这有效。
library(openxlsx)
write.xlsx(df, file = "dummy.xlsx")
即使您的 csv 中的数据在 Material 列周围有引号,excel 还是喜欢为您考虑而不尊重字符引号。现在您可以将 libreoffice 与 calc 一起使用。这将打开文本导入选项,您可以在其中告诉它第一列是文本,它将保留 Material 列的正确格式。
但最简单的就是使用上面的代码。