【问题标题】:How can I get correct date format for ambiguous temperature data?如何为不明确的温度数据获取正确的日期格式?
【发布时间】:2018-09-16 14:56:29
【问题描述】:

我使用rasternetCDF包来导入历史温度数据。但是,日期列的日期格式很奇怪,R 抱怨不是标准日期格式。我使用lubricater base 进行日期格式强制,但仍然没有摆脱这个问题。这是我的部分数据的样子:

> head(dat)
         date tmax  tmin
1 X1980.01.01 1.91 -0.04
2 X1980.01.02 0.77 -1.00
3 X1980.01.03 0.01 -4.37
4 X1980.01.04 3.08 -3.13
5 X1980.01.05 4.69  2.57
6 X1980.01.06 5.08  2.86


> class(dat$date)
[1] "character"

我的dat$date 列变为character 而不是Date。我尝试gsub 摆脱X 字符,但我没有做对。我也尝试了as.Dateas_datetime,但我仍然没有得到正确的日期格式。是否有任何快速解决方案可以将上述日期格式转换为标准格式。 头(napa$日期)

任何想法或任何快速解决方案?

【问题讨论】:

  • 只需删除 X 例如。 lubridate::ymd(gsub("X", "", "X1980.01.01"))
  • lubridate 和 gub 是矢量化的。不需要lapply
  • @RichardTelford 我更新了我原来的数据框格式,你这里有动态解决方案吗?我其实有点困惑。谢谢
  • 所以它是dat$date。如果不想使用lubridate等外部包,在gsub之后做dat$date <- as.Date(dat$date, "%Y.%m.%d")
  • @RichardTelford 很有魅力,感谢您的帮助。

标签: r date data-manipulation


【解决方案1】:

问题已在 cmets 中得到解答。以下是不同的方法。

d <- c("X1980.01.01", "X1980.01.02")

最简洁的:

as.Date(d, "X%Y.%m.%d")

分步:

e <- gsub("X", "", d)
f <- as.Date(e, "%Y.%m.%d")
f     
#[1] "1980-01-01" "1980-01-02"

请注意

class(f)
# "Date"

变体:

e <- gsub("X", "", d)
f <- gsub("\\.", "-", e)
as.Date(f)
#[1] "1980-01-01" "1980-01-02"

或者使用lubridate 包中的ymd

e <- gsub("X", "", d)
lubridate::ymd(e)
#[1] "1980-01-01" "1980-01-02"

【讨论】:

  • 也可以使用as.Date(d, "X%Y.%m.%d"),这可能是最快的,
  • 谢谢,那位拿走蛋糕
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多