【问题标题】:as.Date conversion returns NAas.Date 转换返回 NA
【发布时间】:2017-09-17 12:43:52
【问题描述】:

我正在使用this data。当我想定义变量as.Date() 时,我得到NA

这是我正在使用的代码。有人可以告诉我我做错了什么吗?

dataf <- read.csv("DB.csv")
dataf$Date <- as.Date(dataf$Date, format = "%b-%Y")
str(dataf)
'data.frame':   55 obs. of  9 variables:
 $ Date     : Date, format: NA NA ...
 $ Sydney   : num  85.3 88.2 87 84.4 84.2 84.8 83.2 82.6 81.4 81.8 ...
 $ Melbourne: num  60.7 62.1 60.8 60.9 60.9 62.4 62.5 63.2 63.1 64 ...  
 $ Brisbane : num  64.2 69.4 70.7 71.7 71.2 72 72.6 73.3 73.6 75 ...
 $ Adelaide : num  62.2 63.9 64.8 65.9 67.1 68.6 68.6 69.3 70 71.6 ...  
 $ Perth    : num  48.3 50.6 52.5 53.7 54.7 57.1 59.4 62.6 65.2 70 ...
 $ Hobart   : num  61.2 66.5 68.7 71.8 72.3 74.6 75.8 76.9 76.7 79.1 ...
 $ Darwin   : num  40.5 43.3 45.5 45.2 46.8 49.7 53.6 54.7 56.1 60.2 ...
 $ Canberra : num  68.3 70.9 69.9 70.1 68.6 69.7 70.3 69.9 70.1 71.7 ...

【问题讨论】:

  • 您可能有一个所谓的factor 变量作为输入。 anytime::anydate() 函数会自动处理该问题以及大量可能的日期格式。这可能会有所帮助。
  • 请提供您正在使用的数据的 sn-p,而不是需要我们猜测您正在使用的数据集并下载数据的多个数据集的链接。
  • 另外,您的格式只有月份和年份,as.Date 需要一天。使用paste("01", dataf$Date, sep = "-") 并以适当的格式调用as.Date

标签: r na as.date


【解决方案1】:

除了cmets中的好建议,你应该试试lubridate::parse_date_time",它可以处理不完整的日期

as.Date("01-2017", format="%m-%Y")
# [1] NA
as.POSIXct("01-2017", format="%m-%Y")
# [1] NA
as.POSIXlt("01-2017", format="%m-%Y")
# [1] NA

library(lubridate)
parse_date_time("01-2017", "my")
# [1] "2017-01-01 UTC"

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2021-11-21
    • 2021-05-03
    • 2017-04-15
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多