根据日期删除每个唯一ID的前两个条目

时间:2016-07-08 13:06:38

标签: r

我有一个数据框(其中包括)一列唯一ID和访谈日期。数据框对于每个ID都有许多行。我想删除每个家庭ID的前两个访谈日期的所有行。

感谢您的帮助!

编辑:这是我正在使用的一个例子:

在表格中,我想删除1-4,7-9和11-14行,因为它们都出现在每个ID的前两个访谈日期内。

dates=as.Date(c("1/1/12","1/1/12","1/5/12","1/5/12","1/7/12","1/7/12","2/1/12","2/1/12","2/5/12","6/1/12","6/3/12","6/3/12","6/4/12","6/4/12","6/15/12","6/15/12"),format='%m/%d/%y')
    hh_id=c(1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3)
    df<-data.frame(hh_id,dates)
    arrange(df,hh_id,desc(dates))


 hh_id   dates
1      1  1/7/12
2      1  1/7/12
3      1  1/5/12
4      1  1/5/12
5      1  1/1/12
6      1  1/1/12
7      2  6/1/12
8      2  2/5/12
9      2  2/1/12
10     2  2/1/12
11     3  6/4/12
12     3  6/4/12
13     3  6/3/12
14     3  6/3/12
15     3 6/15/12
16     3 6/15/12

1 个答案:

答案 0 :(得分:3)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'ID'分组,我们order'日期'并使用tail函数删除第一个两个观察结果。

 library(data.table)
 setDT(df1)[order(date), tail(.SD, -2) , by = ID]

注意:

1)假设'date'列为Date类。如果未通过指定Date(如果不在as.Date中)而转换为format YYYY-MM-DD级别。

2)列名和对象名是虚构的。将其更改为原始列名称/对象名称

基于OP帖子中的更新

setDT(df)[df[order(dates), .I[!(dates %in% dates[1:2])] ,hh_id]$V1]