% ungroup 最佳答案 你可以借助 mat-6ren">
gpt4 book ai didi

r - 过滤到观察第一个特定值

转载 作者:行者123 更新时间:2023-12-04 16:23:14 25 4
gpt4 key购买 nike

我尝试仅过滤观察到的第一个 type=="y"值。

df<-data.frame(id=c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3),
type=c("x","x","y","x","x","x","x","y","y","x","x","x","x","y","x","y","x","x"))

期望的输出:

 id type
1 x
1 x
1 y
2 x
2 x
2 x
2 y
3 x
3 x
3 x
3 x
3 y

我用代码试试:

library(dplyr)
df %>% filter(type == "x"|sum(type == "y") == 1) %>%
ungroup

最佳答案

你可以借助 match 并在 slice 中使用它 -

library(dplyr)
df %>% group_by(id) %>% slice(1:match('y', type)) %>% ungroup

# id type
# <dbl> <chr>
# 1 1 x
# 2 1 x
# 3 1 y
# 4 2 x
# 5 2 x
# 6 2 x
# 7 2 y
# 8 3 x
# 9 3 x
#10 3 x
#11 3 x
#12 3 y

match 将返回每个组中第一个 'y' 的位置。但是,如果 idtype 列中没有 'y',这将失败。如果是这种情况,那么您可以使用 filter 如下所示,如果其中没有 'y',它将返回组的所有行。

df %>%
group_by(id) %>%
filter(lag(cumsum(type == 'y'), default = 0) < 1)
ungroup

关于r - 过滤到观察第一个特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69386218/

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