R 根据日期删除每个唯一ID的前两个条目
我有一个数据框,其中有一列唯一的ID和面试日期。数据框中每个ID有许多行。我想删除每个家庭ID前两个访谈日期的所有行 谢谢你的帮助 编辑:以下是我正在使用的示例: 在表中,我想删除第1-4行、第7-9行和第11-14行,因为它们都出现在每个ID的前两个面试日期内R 根据日期删除每个唯一ID的前两个条目,r,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/
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
dates=as.Date(c(“1/1/12”、“1/1/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”),格式=“%m/%d/%y”)
hh_id=c(1,1,1,1,1,2,2,2,3,3,3,3,3)
df我们可以使用数据表
。将'data.frame'转换为'data.table'(setDT(df1)
),按'ID'分组,我们对'date'排序,并使用tail
函数删除前两个观察值
library(data.table)
setDT(df1)[order(date), tail(.SD, -2) , by = ID]
注:
1) 假设“日期”列为date
class。如果未通过指定格式(如果未在YYYY-MM-DD
中)转换为Date
类和as.Date
2) 列名和对象名是虚构的。将其更改为原始列名/对象名
根据OP发布的最新消息
setDT(df)[df[order(dates), .I[!(dates %in% dates[1:2])] ,hh_id]$V1]
请提供一些代码和数据的?dput
(可能只有几行就足够了(请参见?head
))谢谢-我刚刚在上面的编辑中添加了它我希望删除所有有前两个面试日期的行,不仅仅是每个hh_id的前两行。很抱歉不够清晰-我已经在edit@AshleyThomas更新了帖子