如何保留至少满足一次条件的ID的全部数据行?
解决重复测量数据框的个体筛选问题
你的问题出在filter(category=="blood")这一步——它会在每个id组里只保留符合条件的行,而非保留该个体的全部数据。要实现保留所有至少有一次满足条件的个体的全部行,需要先在组内判断该个体是否存在符合条件的记录,再基于这个判断保留整组数据。
正确的dplyr代码如下:
dat2 <- dat1 %>% group_by(id) %>% filter(any(category == "blood")) %>% # 判断组内是否存在至少一条符合条件的记录 ungroup()
解释:
any(category == "blood")会对每个id组返回一个逻辑值:如果组内有至少一行的category等于"blood",就返回TRUE,否则返回FALSE。- 当
filter接收这个组级的逻辑值时,会保留整个组的所有行(只要组的判断结果是TRUE)。
内容的提问来源于stack exchange,提问作者Zklr
相关产品推荐
相关产品推荐

