导出为CSV,在Excel中打开时保留前导零

ymdaylpp  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(501)

我有一系列的海量数据文件,大小从800k到1.4M行不等,其中一个变量的长度为12个字符(数字数据,但前导为零,非零位数少于12)。

col
000000000003
000000000102
000000246691
000000000042
102851000324

等等。
我需要为客户端导出这些文件到CSV文件,使用R。最终的数据需要保留12个字符的结构,但当我在Excel中打开CSV文件时,零消失了。即使在将整个 Dataframe 转换为字符后也会发生这种情况。我使用的代码如下所示。

df1 %>%
mutate(across(everything(), as.character))
##### I did this for all data frames #####

export(df1, "df1.csv")
export(df2, "df2.csv")
....
export(df17, "df17.csv)

我读过一些其他的帖子,说这是一个excel的问题,这是有道理的,但考虑到数据文件的数量和数据量,以及客户端能够在excel中打开它的需要,我需要一种方法来在R的前端完成它。

tjvv9vkg

tjvv9vkg1#

是的,这绝对是Excel的问题!
为了演示,在Excel中输入列值,将文件另存为CSV值,然后在Excel中重新打开,前导零将消失。
一种选择是添加前导非数字字符,如“

paste0("\' ", df$col)

不是很好,但是一个选择。
一个稍微好一点的选择是将Excel的Text函数粘贴到字符串中。这样,Excel将在函数打开时处理该函数。

df$col <- paste0("=Text(", df$col, ", \"000000000000\")")
#or  
df$col <- paste0("=\"", df$col, "\"")
write.csv(df, "df2.csv", row.names = FALSE)

当然,如果CSV文件被保存并重新打开,则前导0将再次消失。
另一种选择是研究使用“writexl”或“XLSX”或类似的包将文件直接保存为.xlsx文件。

相关问题