使用 write.csv 时字符转换为日期

characters converted to dates when using write.csv

我的数据框有一个 A 列,其中包含字符形式的字符串

> df$A
[1] "2-60", "2-61", "2-62", "2-63" etc

我使用 write.csv 保存了 table,但是当我用 Excel 打开它时,A 列的格式显示为日期:

Feb-60
Feb-61
Feb-62
Feb-63
etc

有谁知道我该怎么做才能避免这种情况?

我调整了 write.csv 的参数,但没有任何效果,我似乎无法在 Stack Overflow 中找到有助于解决此问题的示例。

如评论中所述,这是 excel 行为,而不是 R 行为。而且无法停用:

Microsoft Excel is preprogrammed to make it easier to enter dates. For example, 12/2 changes to 2-Dec. This is very frustrating when you enter something that you don't want changed to a date. Unfortunately there is no way to turn this off. But there are ways to get around it.

Microsoft Office Article

根据文章提出的第一个解决方法没有帮助,因为它依赖于更改单元格格式,但是当您在 excel 中打开 .csv 文件时为时已晚(它已经转换为表示日期的整数)。

但是,有一个有用的提示:

If you only have a few numbers to enter, you can stop Excel from changing them into dates by entering:

  • An apostrophe (‘) before you enter a number, such as ’11-53 or ‘1/47. The apostrophe isn’t displayed in the cell after you press Enter.

因此您可以使用

使数据显示为原始数据
vec <- c("2-60", "2-61", "2-62", "2-63")
vec <- paste0("'", vec)

请记住,如果您在 R 中再次阅读这些值,它们仍将带有撇号,因此您可能必须使用

vec <- sub("'", "", vec)

这可能不理想,但至少有效。

另一种方法是将文本作为 excel 公式括在 =" " 中,但最终结果相同,但使用了更多字符。

另一个解决方案 - 有点乏味,使用 Excel 中的导入文本文件,单击对话框,然后在文本导入向导的第 3 步(共 3 步)中,您将可以选择设置列数据格式,对具有“2-60”、“2-61”、“2-62”、“2-63”的列使用 "Text"。如果您使用常规(默认),Excel 会变得聪明并为您转换答案。