dplyr:过滤一系列行(在一列中) [英] dplyr : filter a sequence of rows (in one column)

查看:104
本文介绍了dplyr:过滤一系列行(在一列中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

虚拟数据框:

id_family<- c(1, 1, 2, 2, 3, 3)
people<- c("male", "female", "male", "female", "male", "children") 

dataset <- data.frame(id_family, people)  
dataset

我的结果:

id_family   people
1           male            
1           female          
2           male            
2           female          
3           male            
3           children

我想要的:根据男女顺序过滤行

What I want: filtering rows based on the "male and female" sequence

预期结果:过滤家庭1和2

Expected result: filtering families 1 and 2

id_family   people
1           male            
1           female          
2           male            
2           female          

我试图使用滞后/引导功能没有成功:

I tried to use lag/lead dplyr's functions without success:

 dataset2 <- dataset %>%
    filter(people=="male", lead(people)=="female")


推荐答案

我们可以使用全部

dataset %>%
      group_by(id_family) %>%
      filter(all(c("male", "female") %in% people))
# A tibble: 4 x 2
# Groups: id_family [2]
#  id_family people
#      <dbl> <fctr>
#1         1   male
#2         1 female
#3         2   male
#4         2 female






或根据OP的评论,如果顺序很重要,那么


Or as per the OP's comments, if order is important then

dataset %>%
       group_by(id_family) %>% 
       filter(first(people)=="male", last(people) == "female", n()==2)

这篇关于dplyr:过滤一系列行(在一列中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆