【问题标题】:Date Transformation in RR中的日期转换
【发布时间】:2015-12-18 08:36:23
【问题描述】:

我遇到了一个很小的问题,但不知何故无法解决。

当我导入具有日期的 csv 文件时,日期以“%Y-%m-%d”格式出现。但我希望它采用“%d-%m-%Y”格式。我试过“as.Date”来改造它。但它不起作用。

导入后的数据结构如下:

Date        Share_Val
21/01/2015   20
22/01/2015   19
23/01/2015   21
24/01/2015   23
25/01/2015   26

但是当我通过 read.csv 导入文件时,数据如下所示:

Date        Share_Val
01/21/2015   20
01/22/2015   19
01/23/2015   21
01/24/2015   23
01/25/2015   26

我试过润滑。但这没有帮助。 Sam 的结果正是我想要的。但是当我尝试以下操作时,它不会来

data$date<-format(as.Date(data$date,"%m/%d/%Y"))

谁能给我一些建议?

【问题讨论】:

  • 你能举一个更精确的例子吗,比如你看到的输入字符串?
  • 看包lubridate
  • format(as.Date("2015-09-21"), "%d-%m-%Y")
  • 感谢大家的cmets。我已经在问题本身中回复了大家的建议,因为弗兰克想要更准确一点。
  • @SamThomas 的格式“/”与“-”似乎有点不同。但format(as.Date("21/01/2015"), "%d/%m/%Y") 应该可以工作......虽然正如弗兰克所说,你的问题没有被清楚地描述。

标签: r


【解决方案1】:

看看这是否有帮助。注意stringsAsFactors。如果您的Date 字段是一个因素,您首先需要data$Date &lt;- as.character(data$Date)

data <- data.frame(Date = c("21/01/2015", "22/01/2015", "23/01/2015", 
        "24/01/2015", "25/01/2015"), Share_Val=c(20, 19, 21, 23, 26), 
         stringsAsFactors=F)

format(as.Date(data$Date, "%d/%m/%Y"), "%d-%m-%Y")
[1] "21-01-2015" "22-01-2015" "23-01-2015" "24-01-2015" "25-01-2015"

【讨论】:

  • 非常感谢山姆!你的回答非常好。再次感谢。
【解决方案2】:

评论太长了。

我认为您可能误解了日期在 R 中的工作方式。Date 类的变量(或列)在内部存储为自 1970 年 1 月 1 日以来的天数。当您打印Date 变量时,它使用%Y-%m-%d 格式显示。 as.Date(...) 函数将字符转换为日期。 format=... 参数控制如何解释字符串,而不是如何显示结果,如:

as.Date("02/05/2015", format="%m/%d/%Y")
# [1] "2015-02-05"
as.Date("02/05/2015", format="%d/%m/%Y")
# [1] "2015-05-02"

因此,在第一种情况下,字符串被解释为 2 月 5 日,第二个是 5 月 2 日。请注意,在这两种情况下,结果都以%Y-%m-%d 格式显示(打印)。

【讨论】:

  • 感谢 jlhoward!我没有意识到这一点。这真的很有帮助,即使没有完全回答我的问题。再次感谢。
猜你喜欢
  • 2021-09-13
  • 2013-05-09
  • 1970-01-01
  • 2020-11-23
  • 2021-12-19
  • 2021-04-21
相关资源
最近更新 更多