R 如何从重复观测的最后一行生成子集数据帧?

R 如何从重复观测的最后一行生成子集数据帧?,r,R,简单的问题。我有一个数据框,其中受试者对时间变量和状态变量(死亡/活着)有不同的观察结果。我只想从每个受试者的最后一次观察中得到一个子集,但由于每个受试者的观察数量是可变的,而且690个受试者中有1143个观察结果,因此手动挑选它们将是一件令人头痛的事。聚合不会起作用,因为每个对象的最后一次观察已经是前一次观察的聚合“时间值” name visit.date status 30 20 337 1 31 20 421 1 32

简单的问题。我有一个数据框,其中受试者对时间变量和状态变量(死亡/活着)有不同的观察结果。我只想从每个受试者的最后一次观察中得到一个子集,但由于每个受试者的观察数量是可变的,而且690个受试者中有1143个观察结果,因此手动挑选它们将是一件令人头痛的事。聚合不会起作用,因为每个对象的最后一次观察已经是前一次观察的聚合“时间值”

       name visit.date status

30   20        337      1
31   20        421      1
32   20        502      0  <- Row to subset
33   21        427      0  <- Row to subset
34   22         NA     NA  <- Row to subset
35   23        800      1
36   23        882      0  <- Row to subset
37   24        157      1
38   24        185      1
39   24        214      1
40   24        298      1
41   24        381      1  <- Row to subset
42   25        386      1  <- Row to subset
43   26         NA     NA  <- Row to subset
44   27        522      1
45   27        643      1
46   27        711      1  <- Row to subset
47   28        280      0  <- Row to subset
48   29        227      1
49   29        322      1
50   29        335      0  <- Row to subset
name visit.date状态
30   20        337      1
31   20        421      1

32 20 502 0这里有一个使用dplyr的解决方案:

library(dplyr)
df %>%  group_by(name) %>% filter(row_number()==n()) 

这里有一个使用dplyr的解决方案:

library(dplyr)
df %>%  group_by(name) %>% filter(row_number()==n()) 

使用dplyr时,
DF%>%groupby(name)%%>%slice(n())
有效,因为
n()
是每个组中的行数,
slice
选择每个组中的行数。您可以使用
duplicated
,即
DF[!duplicated(DF$name,fromLast=TRUE),]
使用dplyr时,
DF%>%groupby(name)%>%slice(n())
之所以有效,是因为
n()
是每个组中的行数,而
slice
选择每个组中的行号。您可以使用
duplicated
,即
df[!duplicated(df$name,fromLast=TRUE),]
看起来这样做,行数()==n()do?它创建一个逻辑向量,过滤基于该向量
row_number
包含每个组内的行号,
n()
是每个组内的行数。因此,它仅为每个组中的最后一行返回
TRUE
。您可以尝试
df%>%group\u by(name)%%>%mutate(rownum=row\u number())
查看
row\u number
的工作原理,row\u number()==n()的作用是什么?它创建了一个逻辑向量,过滤基于该向量
row_number
包含每个组内的行号,
n()
是每个组内的行数。因此,它仅为每个组中的最后一行返回
TRUE
。您可以尝试
df%>%group\u by(name)%%>%mutate(rownum=row\u number())
查看
row\u number
的工作原理