gpt4 book ai didi

r - 过滤分组变量维护序列

转载 作者:行者123 更新时间:2023-12-04 09:38:55 25 4
gpt4 key购买 nike

我有一个数据框:

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)
)

我想过滤 只有每个组有两个事件,并按照我过滤的顺序进行。比如我只找事件 EOSPNOR但也有顺序。这段代码:
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 之前.我如何实现这一目标?

最佳答案

您可以使用 match获取 Activity == EOSP 的第一个实例并使用 slice在此之前删除所有内容。完成此操作后,您可以删除重复项并过滤 EOSPNOR , IE。

library(tidyverse)

df %>%
group_by(Group) %>%
mutate(new = match('EOSP', Activity)) %>%
slice(new:n()) %>%
distinct(Activity, .keep_all = TRUE) %>%
filter(Activity %in% c('EOSP', 'NOR'))

这使,

# A tibble: 4 x 4
# Groups: Group [2]
Group Activity TimeLine new
<fct> <fct> <dbl> <int>
1 A EOSP 1 1
2 A NOR 2 1
3 B EOSP 2 2
4 B NOR 4 2


注 1:您可以 ungroup()select(-new)
注 2:此处发出的警告消息

(Warning messages: 1: In new:4L : numerical expression has 4 elements: only the first used 2: In new:4L : numerical expression has 4 elements: only the first used )



不影响我们,因为我们只需要它来使用第一个元素,因为无论如何都是相同的

关于r - 过滤分组变量维护序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53739173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com