【问题标题】:extending filtering in a tibble在小标题中扩展过滤
【发布时间】:2018-03-13 07:57:18
【问题描述】:

考虑以下小标题:

library(tidyverse)
a <- tibble(id = 1:5, val = c(-1,-2,0,1,-1))

我想只选择 a 中的某些行:即我想从 a 的顶部删除行,直到剩余的第一行具有非负值在瓦尔。 所以在我上面的例子中,我想删除前两行(因为那里的 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 中有一个更优雅的解决方案。有什么提示吗? 谢谢。

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    我们可以在逻辑向量(val &gt;=0))和非0的slice元素上使用cumsum

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2011-04-12
      相关资源
      最近更新 更多