【发布时间】:2018-04-20 11:34:19
【问题描述】:
我有一个数据,我想先过滤一些行并对剩余的行求和。
过滤条件如下;
- 对于 gr==1,找到最后一次出现的
y_value==10并保留它之前的所有行(包括该值最后一次出现的 10 行)! - 对于 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,感兴趣的行将会消失!在这一点上的任何指南将不胜感激!
【问题讨论】: