考虑以下因素:
library(tidyverse)
a <- tibble(id = 1:5, val = c(-1,-2,0,1,-1))
我想只选择 a 中的某些行:即我想从 a 顶部删除行,直到第一个剩余行具有非负值在val。 所以在我上面的例子中,我想删除前两行(因为val是负数),然后保留所有后续行。
我设法找到了一种解决方法:
idx <- which(a$val >= 0) %>% min()
a %>% slice(idx:nrow(a))
# A tibble: 3 x 2
id val
<int> <dbl>
1 3 0
2 4 1.00
3 5 -1.00
我觉得tidyverse内部有一个更优雅的解决方案。任何提示? 谢谢。
答案 0 :(得分:1)
我们可以对非0的逻辑向量(cumsum
)和val >=0)
元素使用slice
a %>%
slice(which(cumsum(val >=0)!=0))
或filter
a %>%
filter(cumsum(val>=0) > 0)
# A tibble: 3 x 2
# id val
# <int> <dbl>
#1 3 0
#2 4 1.00
#3 5 -1.00