ID Date1 Date2 Date3
1111 4/6/2016 NA 5/1/2016
1111 4/6/2016 3/31/2016 NA
1111 4/6/2016 4/2/2016 3/29/2016
1112 4/17/2016 4/29/2016 6/2/2016
1112 4/17/2016 5/1/2016 5/16/2016
1112 4/17/2016 NA 2/1/2016
1113 4/6/2016 3/4/2016 5/12/2016
1113 4/6/2016 4/4/2016 2/16/2016
1114 5/2/2016 4/20/2016 5/29/2016
1114 5/2/2016 4/30/2016 5/21/2016
1115 3/31/2016 2/3/2016 2/2/2016
1115 3/31/2016 2/5/2016 2/4/2016
鉴于上述数据集,我想从Date3中选择MAX(最新)值,并从每个ID的Date2中选择MIN(最旧)值,假设:
Date2中至少有一个值比Date1少(旧),而Date3中的一个值比Date1 PER ID更多(更新)。
我希望返回以下内容:
1111 4/6/2016 3/31/2016 5/1/2016
1113 4/6/2016 3/4/2016 5/12/2016
1114 5/2/2016 4/20/2016 5/29/2016
(不会返回1112,因为Date2中的值都不小于Date1,并且因为Date3中的值都不大于Date1,所以不会返回1115)。
我已经在这方面工作了很长时间(我是一名新手编码员),所以任何帮助都会非常感激!
答案 0 :(得分:1)
我会分两步完成。首先,获取符合条件的ID集:
library(magrittr)
library(dplyr)
selected_ids <- data %>%
group_by(ID) %>%
summarize(PassD1vD2=any(na.omit(Date2 < Date1)),
PassD1vD3=any(na.omit(Date3 > Date1))) %>%
filter(PassD1vD2 & PassD1vD3) %$% ID %>% unique
然后选择组min&amp;最大:
filtered_data <- data %>%
filter(ID %in% selected_ids) %>%
group_by(ID) %>%
summarize(Date1=Date1[1], minD2=min(Date2, na.rm=TRUE), maxD3=max(Date3, na.rm=TRUE))
答案 1 :(得分:0)
如果你使用dplyr库试试这个:
library(dplyr)
filtered_data <- data %>% filter(Date2 < Date1 & Date3 > Date1) %>%
group_by(ID, Date1) %>%
summarize(minD2 = min(Date2, na.rm = T), maxD3 = max(D3, na.rm = T)
那应该给你想要的数据框。