【问题标题】:Can I use the R package lubridate to parse dates if my month, day, and year are in separate columns?如果我的月、日和年在不同的列中,我可以使用 R 包 lubridate 来解析日期吗?
【发布时间】:2020-02-17 17:12:28
【问题描述】:

我不熟悉使用 R,但我正在尝试学习如何使用它来使我的数据分析更具重现性。我在三列中输入了我的日期作为下车日期和三列中的取件日期(一个月,一天和一年)。我需要能够让 R 将其识别为日期,因此我可以将字段中的时间计算为一年的一小部分(天/365)。我安装了 lubridate 包并尝试使用 mdy() 函数,但它给了我以下错误消息:

Error: Column `drop_off_date` must be length 150 (the number of rows) or one, not 450
In addition: Warning message:
All formats failed to parse. No formats found. 

我也尝试过使用反引号,但这也不起作用。我认为这可能是因为我的日期是如何在不同的列中设置的,但我不确定。这是我用于此的代码部分:

mutate(drop_off_date = mdy(dropoff_month, dropoff_day, dropoff_year),
         pickup_date = mdy(pickup_month, pickup_day, pickup_year),

有人对不同的功能有什么建议吗?或者我可以修复什么来使用这个功能?

【问题讨论】:

  • 先使用paste 或paste0,或许mdy(paste0(dropoff_month, dropoff_day, dropff_year))?
  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 仅供参考,我的第一条评论未经测试,paste0(没有sep=)不适用于个位数的月份或日期。

标签: r lubridate


【解决方案1】:

lubridate 函数采用单个字符串向量。我的第一条评论建议paste0 也可以工作,但不能直接工作(参见下面的代码),因此您需要包含一个separator(例如paste 的默认" " 空格)。

library(lubridate)
### wrong
mdy(10, 13, 2018)
# Warning: All formats failed to parse. No formats found.
# [1] NA NA NA

### some fixed
mdy(paste(10, 13, 2018))
# [1] "2018-10-13"

library(dplyr)
data.frame(y=c(2018,2019), m=c(10,9), d=c(30,1)) %>%
  mutate(date = mdy(paste(m, d, y)))
#      y  m  d       date
# 1 2018 10 30 2018-10-30
# 2 2019  9  1 2019-09-01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多