r - 过滤分组变量维护序列
问题描述
我有一个数据框:
df <- data.frame(
Group=c('A','A','A','A','B','B','B','B'),
Activity = c('EOSP','NOR','EOSP','COSP','NOR','EOSP','WL','NOR'),
TimeLine=c(1,2,3,4,1,2,3,4)
)
我只想过滤每个组的两个活动,并按照我过滤的顺序。例如,我只在寻找活动EOSP
,NOR
但也在寻找顺序。这段代码:
df %>% group_by(Group) %>%
filter(all(c('EOSP','NOR') %in% Activity) & Activity %in% c('EOSP','NOR'))
结果是:
# A tibble: 6 x 3
# Groups: Group [2]
Group Activity TimeLine
<fct> <fct> <dbl>
1 A EOSP 1
2 A NOR 2
3 A EOSP 3
4 B NOR 1
5 B EOSP 2
6 B NOR 4
我不希望第 3 行EOSP
出现在NOR
. 同样对于 B 组,我不想要第 4 行,就像NOR
之前发生的那样EOSP
。我如何实现这一目标?
解决方案
这是data.table包的一个选项:您自己加入df
,将其子集以仅保留EOSP
Activity
并按组计算最小值TimeLine
,然后您可以仅保留TimeLine
大于或等于 this的行TimeLine
,以确保NOR
仅保留如果有EOSP
之前。然后,如果您只想每组保留 2 个活动,则删除重复的组和活动:
df[df[Activity=="EOSP", min(TimeLine), by=Group], on="Group"][Activity %in% c("NOR", "EOSP") & TimeLine >= V1][!duplicated(paste(Group, Activity))]
# Group Activity TimeLine V1
#1: A EOSP 1 1
#2: A NOR 2 1
#3: B EOSP 2 2
#4: B NOR 4 2
推荐阅读
- python - VS 代码有“ImportError:没有名为 MyQR 的模块”
- database - 项目的postgresql中一对多关系中使用的主键
- reactjs - 从类组件更改为功能组件
- java - Spring boot Tomcat WAR部署失败org.springframework.beans.factory.UnsatisfiedDependencyException
- ios - 如果在显示视图后调用函数,则 UIView 性能问题
- android - Android Studio 4.1 gradle 资源未解析参考
- java - 如何遍历对象的列表?
- javascript - javascript对象中的不同括号表示法和点表示法是什么
- javascript - 如何添加 moment.locale()
- ruby-on-rails - ActionController::UrlGenerationError in ArticlesController#import