长数据 - 当每个人的第一个值 =X R 时删除所有行

long data - remove all rows when first value for each person =X R

我有一个类似于下面的长数据框。我想将数据框限制为第一次观察时年龄 <65 岁的人。注意苏在研究过程中年满 65 岁,我不想删除她的任何数据。这是因为她的第一个值 <65。

我尝试创建一个函数....我想如果我可以为每个人的第一个值大于 65 时创建一个指示变量,那么我可以排除那个人的行。

df$first<-ave(df$string, df$id, FUN=function(x) [1]>65)  ##wrong!



 id string
1    pat     71
2    pat     72
3    pat     73
4    pat     74
5    tom     51
6    tom     52
7    tom     53
8    tom     54
9    sue     63
10   sue     64
11   sue     65
12   sue     66
13  mary     68
14  mary     69
15  mary     70
16  mary     71
17 harry     17
18 harry     18
19 harry     19
20 harry     20

任何人都可以解释一下吗?

您可以使用

df[as.logical(with(df, ave(string, id, FUN= function(x) x[1] < 65))),]

或使用data.table

library(data.table)
setDT(df)[, .SD[string[1L] <65] , id]