如何从重复观察的最后一行制作子集数据帧?

时间:2016-03-07 20:17:23

标签: r

简单的问题。我有一个数据框,其中主题对时间变量和状态变量(死亡/活着)有不同的观察结果。我想从每个受试者的最后一次观察中制作一个子集,但由于每个受试者的观察数量是可变的,并且来自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

正如你所看到的,有一些科目只有一个观察,我将保留这些,但是有2,3或更多观察的科目。如何对每个主题进行子集化并使每个主题只进行1次观察(总共620行)。这是一个生存分析,我可以对数据帧进行分析,但是我不能对这个数据帧进行coxph,因为我想要对比的自变量只有620个长度(每个主题1个)。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

以下是使用dplyr的解决方案:

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

答案 1 :(得分:1)

df[c(df$name[-nrow(df)]!=df$name[-1L],T),];
##    name visit.date status
## 32   20        502      0
## 33   21        427      0
## 34   22         NA     NA
## 36   23        882      0
## 41   24        381      1
## 42   25        386      1
## 43   26         NA     NA
## 46   27        711      1
## 47   28        280      0
## 50   29        335      0