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