【问题标题】:R select previous car ownerships within 6 monthsR 选择 6 个月内以前的汽车所有权
【发布时间】:2017-01-02 23:18:04
【问题描述】:

为清楚起见进行了编辑:

我对 R 很陌生。我有一个数据框,其中包含具有多个所有权开始和结束日期的车辆。我正在寻找在当前所有权后 6 个月内拥有以前所有权的车辆。

vhc_key     start_date  end_date
1           2006-12-16  2015-10-05
1           2015-11-21  NA
2           2014-01-14  2014-02-14
2           2014-03-14  NA
3           2014-01-14  2014-02-14
3           2015-03-14  NA

结果:

vhc_key     start_date  end_date
1           2006-12-16  2015-10-05
2           2014-01-14  2014-02-14

TRUE = 车辆 1 和 2,它们之前的结束日期在其最后开始日期的 6 个月内。 FALSE = 车辆 3,其上一个 end_date 2014-02-14 不在其最后一个开始日期 2015-03-14 的 6 个月内。

使用 Dplyr 会是这样,但这似乎不起作用:

df <- df %>%
  group_by(vhc_key) %>%
  filter(end_date >= max(start_date) - months(6))

任何帮助将不胜感激。

【问题讨论】:

  • 你能解释更多吗?如何选择行?我不清楚。
  • 您是否在比较每个 vhc_key 的最后一个 end_date?
  • 我的目标是为每辆车选择结束日期在每辆车的最大开始日期前 6 个月内的行。 Dplyr 类似于: df % group_by(vhc_key) %>% filter(end_date IS BETWEEN max(start_date) AND max(start_date)-6 个月)
  • 您将“vhc_key”的结束日期设为 NA。因此,在这种情况下,我们是采用前一个 end_date 还是通过将 end_date 的每个元素与 start_date 的最大值进行比较,然后仅选择所有比较结果为 TRUE 的 vhc_key
  • 如果 end_date 为 NA,我们可以删除这一行,只保留每辆车的最大开始日期前 6 个月内带有 end_date 的 vhc_keys

标签: r


【解决方案1】:

假设您的数据集已正确排序(根据每辆车的开始日期),这可能会起作用。

library(dplyr)
library(lubridate)

dt = read.table(text = "vhc_key     start_date  end_date
                1           2006-12-16  2015-10-05
                1           2015-11-21  NA
                2           2014-01-14  2014-02-14
                2           2014-03-14  NA
                3           2014-01-14  2014-02-14
                3           2015-03-14  NA", header=T, stringsAsFactors=F)


dt %>% 
  mutate(start_date = ymd(start_date),                                                  # update columns to date-time (if they are not)
         end_date = ymd(end_date)) %>%
  group_by(vhc_key) %>%
  mutate(dist = as.numeric(difftime(max(start_date), end_date, units="weeks"))) %>%     # get distance of end date and max start date (in weeks)
  filter(!is.na(dist) & dist <= 24) %>%                                                 # keep rows with distance up to 24 weeks (6 months)
  ungroup %>%
  select(-dist)

# # A tibble: 2 x 3
#   vhc_key start_date   end_date
#     <int>     <date>     <date>
# 1       1 2006-12-16 2015-10-05
# 2       2 2014-01-14 2014-02-14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多