【问题标题】:convert date to numeric and back to date将日期转换为数字并返回日期
【发布时间】:2019-06-10 23:01:30
【问题描述】:

我有一些日期,我正在尝试将它们转换为数字,然后返回原始日期。

      Date
1990-12-31 
1991-12-31 
1992-12-31 
1993-12-31 
1994-06-30 
1994-12-31 

我试过了,

as.numeric(DF[1:6])
[1]  1  2  3  5  7
as.Date(as.numeric(DF[1:6]), "1990-12-31")
[1] "1991-01-01" "1991-01-02" "1991-01-03" "1991-01-05" "1991-01-07" "1991-01-08"

我注意到时间间隔的问题。我应该怎么做才能获得原始日期?

【问题讨论】:

  • 你只是想创建一个因子变量吗?
  • as.numeric(DF[1:6]) 返回整数的事实意味着class(DF$Date)factor。使用as.Date 直接转换为日期对象。请注意,您需要选择向量,而不是整个数据框:as.Date(DF$Date)
  • 如果您更愿意使用[row, column] 表示法:as.Date(DF[1:6, 1])

标签: r date as.date


【解决方案1】:

如果您拥有的是一个数据框,其中有一列 factor 类可重复显示在最后的注释中,那么我们不想将 as.numeric 应用于它,因为这只会给出底层代码没有意义的因素水平。相反,这给了Date 类:

d <- as.Date(DF$Date)
d
## [1] "1990-12-31" "1991-12-31" "1992-12-31" "1993-12-31" "1994-06-30"
## [6] "1994-12-31"

这给出了自 UNIX 纪元以来的天数:

no <- as.numeric(d)
no
## [1] 7669 8034 8400 8765 8946 9130

这又回到Date类:

as.Date(no, "1970-01-01")
## [1] "1990-12-31" "1991-12-31" "1992-12-31" "1993-12-31" "1994-06-30"
## [6] "1994-12-31"

注意

Lines <- "
      Date
1990-12-31 
1991-12-31 
1992-12-31 
1993-12-31 
1994-06-30 
1994-12-31 "
DF <- read.table(text = Lines, header = TRUE)

【讨论】:

  • 谢谢!如果我只有月份和年份怎么办?我能想到的最短答案是format(as.Date(as.numeric(as.Date(paste(DF$Date,"-01",sep=" ")))), "%Y-%m")。有什么建议吗?
  • 如果您的目标只是将一个因子转换为字符串并且 f 是因子,那么 as.character(f) 或 format(f)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2012-06-28
  • 2021-09-18
  • 2020-09-13
相关资源
最近更新 更多