选择R中每个组中具有最大值的行

时间:2019-05-08 08:54:48

标签: r dataframe dplyr

我想提取pre.post ==“ pre”的行以及数据帧中每个参与者(ID)内“ year”的最大值。

我的数据如下:

df <- read.table(text="pre.post     ID  year
                      post        800033  2011 
                       pre        800033  2009 
                      post        800033  2011 
                       pre        800033  2010 
                      post        800076  2009 
                       pre        800076  2008 
                      post        800076  2009 
                       pre        800076  2007 
                       pre        800100  2018 
                      post        800125  2009 
                       pre        800125  2008 
                      post        800222  2010 
                      post        800223  2013 
                      pre         800223  2011", header = T)

在最终数据集中,我希望每人只有一行。此行应满足pre.post == "pre",并且year的值应该是此人中year的最大值。

例如,对于ID == 800033,我的目标是只包含(与year == 2010)的行。

没有任何前置值的个人(例如ID == 800222)应在最终数据集中删除。只有一个预值(例如ID == 800223ID == 800100)的个人应保留唯一可用的行。

最终数据集应如下所示:

df.1 <- read.table(text="pre.post     ID  year pre.post outcome1 outcome2

                 1                 pre 800033  2010 A           3  4
                 2                 pre 800076  2008 B           2  7
                 3                 pre 800100  2018 C           3  4
                 4                 pre 800125  2008 A           2  8
                 5                 pre 800223  2011 C           4  NA", header = T)

我已经尝试了此代码(使用dplyr):

df %>% group_by(ID) %>% filter(pre.post == "pre") %>% summarise(year = max(year))

但是,然后我丢失了其他变量,而我的新数据集仅包含ID和年份。

您对如何完成这项工作有意见吗?

1 个答案:

答案 0 :(得分:2)

一个选项是

library(dplyr)
df %>% 
  filter(pre.post == "pre") %>%
  group_by(ID) %>%
  filter(year == max(year))