如何在特定日期之前更改日期格式和从数据框中删除行

时间:2019-11-13 17:37:02

标签: r

我有一个包含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日之前的所有行

谢谢!

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