如果我的月、日和年在不同的列中,我可以使用 R 包 lubridate 来解析日期吗?
Can I use the R package lubridate to parse dates if my month, day, and year are in separate columns?
我是 R 的新手,但我正在尝试学习如何使用它来使我的数据分析更具可重现性。我将我的日期输入三列作为下车日期,三列作为取件日期(一列为月,一列为日,一列为年)。我需要能够让 R 将其识别为日期,以便我可以将字段中的时间计算为一年的一小部分 (days/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),
有没有人对不同的功能有任何建议,或者我可以修复什么来使用这个功能?
lubridate
函数采用单个字符串向量。我的第一条评论建议 paste0
也可以工作,但不能直接使用(请参阅下面的代码),因此您需要包含一个 sep
arator(例如 paste
的默认 " "
space).
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
我是 R 的新手,但我正在尝试学习如何使用它来使我的数据分析更具可重现性。我将我的日期输入三列作为下车日期,三列作为取件日期(一列为月,一列为日,一列为年)。我需要能够让 R 将其识别为日期,以便我可以将字段中的时间计算为一年的一小部分 (days/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),
有没有人对不同的功能有任何建议,或者我可以修复什么来使用这个功能?
lubridate
函数采用单个字符串向量。我的第一条评论建议 paste0
也可以工作,但不能直接使用(请参阅下面的代码),因此您需要包含一个 sep
arator(例如 paste
的默认 " "
space).
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