长数据 - 当每个人的第一个值 =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]
我有一个类似于下面的长数据框。我想将数据框限制为第一次观察时年龄 <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]