我有一个数据框(其中包括)一列唯一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
答案 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]