我错过了一些基本的过滤知识。对于方案dplyr
和方案{{1},当value
在同一日期小于300
时,某些a
或其他方式可以返回实例}}?
b
答案 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.
这将为您提供在a
和b
中显示的值低于300的日期(与akrun的解决方案不同,该解决方案还包括仅出现在a
中的一个或b
)。
答案 1 :(得分:2)
我们可以filter
all
&#39;值&#39;在按“tstep&#39;
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