我有一个包含880万观察值的数据框,并且需要在特定日期之前从该数据框中删除行。当前日期格式为MM / DD / YYYY,但我想将其转换为R日期格式(我相信为YYYY-MM-DD)。
当我运行下面的代码时,它会将它们设置为正确的R格式,但不会保留正确的日期。由于某种原因,它的日期为2020年。我的数据框中没有一个日期为2020年。
> dates <- nyc_call_data_sample$INCIDENT_DATETIME
> date <- as.Date(dates,
+ format = "%m/%d/%y")
> head(nyc_call_data_sample$INCIDENT_DATETIME)
[1] "07/01/2015" "04/24/2016" "04/01/2013" "02/07/2015" "06/27/2016" "05/04/2017"
> head(date)
[1] "2020-07-01" "2020-04-24" "2020-04-01" "2020-02-07" "2020-06-27" "2020-05-04"
> nyc_call_data_sample$INCIDENT_DATETIME <- strptime(as.character(nzd$date), "%d/%m/%y")
此外,我的数据可以追溯到2013年。我该如何删除数据框中2017年1月1日之前的所有行
谢谢!
答案 0 :(得分:2)
as.Date
和基本?Extract
离子是您的朋友。
dat <- data.frame(
unformatted = c("07/01/2015", "04/24/2016", "04/01/2013", "02/07/2015", "06/27/2016", "05/04/2017")
)
dat$date <- as.Date(dat$unformatted, format = "%m/%d/%Y")
dat
# unformatted date
# 1 07/01/2015 2015-07-01
# 2 04/24/2016 2016-04-24
# 3 04/01/2013 2013-04-01
# 4 02/07/2015 2015-02-07
# 5 06/27/2016 2016-06-27
# 6 05/04/2017 2017-05-04
dat[ dat$date > as.Date("2017-01-01"), ]
# unformatted date
# 6 05/04/2017 2017-05-04
(随时使用dat$unformatted <- NULL
删除未格式化的列。)
使用tidyverse
:
library(dplyr)
dat %>%
mutate(date = as.Date(unformatted, format = "%m/%d/%Y")) %>%
select(-unformatted) %>%
filter(date > as.Date("2017-01-01"))
# date
# 1 2017-05-04