基于两个条件过滤:小于匹配日期的值?

时间:2018-05-08 17:21:42

标签: r dplyr

我错过了一些基本的过滤知识。对于方案dplyr和方案{{1},当value在同一日期小于300时,某些a或其他方式可以返回实例}}?

b

2 个答案:

答案 0 :(得分:2)

这样的事情会这样做(假设我已正确解释了这个问题)......

df %>% filter(value<300) %>% #remove values 300+
       group_by(tstep) %>% 
       filter(all(c("a","b") %in% scenario)) #check both scenarios exist for each tstep

  scenario tstep      value
1 a        1924-02-29  260.
2 a        1924-10-31  190.
3 a        1924-11-30  290.
4 b        1924-02-29  250.
5 b        1924-10-31  222.
6 b        1924-11-30  299.

这将为您提供在ab中显示的值低于300的日期(与akrun的解决方案不同,该解决方案还包括仅出现在a中的一个或b)。

答案 1 :(得分:2)

我们可以filter all&#39;值&#39;在按“tstep&#39;

分组后,小于300
df %>% 
 group_by(tstep) %>%
 filter(all(value < 300))
# A tibble: 7 x 3
# Groups:   tstep [4]
#  scenario tstep               value
#  <fct>    <dttm>              <dbl>
#1 a        1924-02-29 00:00:00   260
#2 a        1924-10-31 00:00:00   190
#3 a        1924-11-30 00:00:00   290
#4 b        1924-02-29 00:00:00   250
#5 b        1924-10-31 00:00:00   222
#6 b        1924-11-30 00:00:00   299
#7 b        1926-02-28 00:00:00   288

如果我们的情景数量为&#39;一些&#39; tstep&#39;小于2我们想过滤掉它们

df %>% 
  group_by(tstep) %>% 
  filter(n_distinct(scenario)== 2 , all(value < 300))
# A tibble: 6 x 3
# Groups:   tstep [3]
#  scenario tstep               value
#  <fct>    <dttm>              <dbl>
#1 a        1924-02-29 00:00:00   260
#2 a        1924-10-31 00:00:00   190
#3 a        1924-11-30 00:00:00   290
#4 b        1924-02-29 00:00:00   250
#5 b        1924-10-31 00:00:00   222
#6 b        1924-11-30 00:00:00   299