gpt4 book ai didi

r - 在 dplyr 中过滤和求和行

转载 作者:行者123 更新时间:2023-12-02 09:16:01 25 4
gpt4 key购买 nike

我有一个数据,我想首先过滤一些行并对剩余的行求和。

过滤条件如下;

  1. 对于 gr==1 查找最后一次出现的 y_value==10 并保留其之前的所有行(包括最后一次出现该值的第 10 行)!
  2. 对于 gr==2 找到第一个出现的 y_value==10 并保留其后面的所有行(包括第一次出现该值的第 10 行)!

数据是这样的;

df <- data.frame(gr=rep(c(1,2),c(8,7)), 
y_value=c(c(2,10,10,8,10,6,0,0),c(0,0,10,10,6,8,10)))



gr y_value
1 1 2
2 1 10
3 1 10
4 1 8
5 1 10
6 1 6
7 1 0
8 1 0
9 2 0
10 2 0
11 2 10
12 2 10
13 2 6
14 2 8
15 2 10

我根据summing-rows-based-on-conditional-in-groups尝试了这个;

df_temp <- df %>% 
group_by(gr) %>%
mutate(rows_to_aggregate=cumsum(y_value==10)) %>%
filter(ifelse(gr==1, rows_to_aggregate !=0, ifelse(gr==2, rows_to_aggregate ==0 | y_value==10, rows_to_aggregate ==0))) %>%
filter(ifelse(gr==1, row_number(gr) != 1, ifelse(gr==2, row_number(gr) != n(), rows_to_aggregate ==0)))

但是如果我在 gr==1 中执行 rows_to_aggregate !=0 ,感兴趣的行将会消失!此时任何指导将不胜感激!

最佳答案

df_to_aggregate <- df %>% 
group_by(gr) %>%
mutate(rows_to_aggregate = cumsum(y_value == 10)) %>%
filter(!(gr == 1 & rows_to_aggregate == max(rows_to_aggregate) & y_value != 10)) %>%
filter(!(gr == 2 & rows_to_aggregate == 0)) %>%
select(-rows_to_aggregate)
df_to_aggregate

# A tibble: 10 x 2
# Groups: gr [2]
gr y_value
<dbl> <dbl>
1 1 2
2 1 10
3 1 10
4 1 8
5 1 10
6 2 10
7 2 10
8 2 6
9 2 8
10 2 10

关于r - 在 dplyr 中过滤和求和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168559/

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