我想提取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 == 800223
和ID == 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和年份。
您对如何完成这项工作有意见吗?
答案 0 :(得分:2)
一个选项是
library(dplyr)
df %>%
filter(pre.post == "pre") %>%
group_by(ID) %>%
filter(year == max(year))