2016-08-26 35 views
0

編輯中爲了清晰:r選擇已先前的汽車所有權6個月

我很新的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不在上次開始日期的6個月內2015-03-14。

隨着Dplyr它會是這樣的,但是這似乎並沒有工作:

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

任何幫助將不勝感激。

+0

你能解釋更多嗎?如何選擇行?我不清楚。 –

+0

你在比較每個vhc_key的最後end_date嗎? – akrun

+0

我的目標是爲每輛車選擇行數,並在每輛車最長開始日期之前6個月內結束日期。 Dplyr會是這樣的: DF <- df %>% GROUP_BY(vhc_key)%>% 過濾器(END_DATE之間最大(起始)和MAX(起始)-6個月) –

回答

0

假設您的數據集已按照每輛車的起始日期進行了正確排序,這可能會起作用。

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