【问题标题】:characters converted to dates when using write.csv使用 write.csv 时转换为日期的字符
【发布时间】:2015-07-09 11:48:06
【问题描述】:

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

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

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

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

谁知道我可以做些什么来避免这种情况?

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

【问题讨论】:

  • 请出示您用于编写文件的代码
  • 听起来是 Excel 进行转换,而不是 R。
  • write.csv(df, file="analysis.csv", quote=TRUE) 我怀疑这是 Excel 的错,但我希望在 R 中做一些事情,所以 Excel 不会这样做。
  • 如果您将该文件读回 R,格式是什么?
  • @nrussell,好问题。如果我将“analysis.csv”读回 R,我会得到原始格式,而不是日期。我梳理了 Excel 选项,但找不到任何方法来停用这种烦人的自动格式化。感谢您的帮助。

标签: r export-to-csv


【解决方案1】:

正如 cmets 中所说,这是一种 excel 行为,而不是 R。并且无法停用:

Microsoft Excel 已预编程,可以更轻松地输入日期。为了 例如,12/2 更改为 2-Dec。这很令人沮丧,当你 输入您不想更改为日期的内容。很遗憾 无法关闭此功能。但是有办法绕过它。

Microsoft Office Article

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

不过,有一个有用的提示:

如果您只有几个数字要输入,您可以停止 Excel 通过输入将它们更改为日期:

  • 输入数字前的撇号 ('),例如 '11-53 或 '1/47。按下后,撇号不会显示在单元格中 输入。

所以你可以通过使用使数据显示为原始数据

vec <- c("2-60", "2-61", "2-62", "2-63")
vec <- paste0("'", vec)

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

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

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

另一种方法是将 =" " 中的文本作为 excel 公式括起来,但它具有相同的最终结果并使用更多字符。

【讨论】:

  • Excel 团队中做出这个非可选设计决定的天才都应该被拍打。
  • 让我感到有趣的是,他们没有简单地创建一个复选框来禁用它,而是写了一篇文章说这可能非常令人沮丧,并提供一些有用的想法如果你只有几个数字输入.
【解决方案2】:

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

【讨论】:

  • 谢谢,这是最适合我的解决方案,因为我需要 Excel 中的输出。
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多