【问题标题】:Pipe/dplyr friendly way to filter non zero elements of a vector过滤向量的非零元素的管道/dplyr友好方式
【发布时间】:2020-09-05 20:11:15
【问题描述】:

令人惊讶的是,我没有找到这个简单问题的答案。我需要一种管道友好的方式来计算向量中非零元素的数量。

没有管道:

v <- c(1.1,2.2,0,0)
length(which(v != 0))

当我尝试使用管道执行此操作时出现错误

v %>% which(. != 0) %>% length
Error in which(., . != 0) : argument to 'which' is not logical

dplyr 解决方案也会有所帮助

【问题讨论】:

标签: r dplyr pipe tidyverse


【解决方案1】:

这里有一些不同的选项:

首先,我们可以在您的原始表单中使用{}

v %>% {which(. != 0)} %>% length
#[1] 2

或者我们可以使用{} 来让我们重复.

v %>% {.[. != 0]} %>% length
#[1] 2

或者我们可以使用 Base R 中的subset

v %>% subset(. != 0) %>% length
#[1] 2

【讨论】:

    【解决方案2】:

    使用magrittr 的一种方式可能是:

    v %>%
     equals(0) %>%
     not() %>%
     sum()
    
    [1] 2
    

    【讨论】:

    • 我没有意识到help("extract","magrittr")中有所有这些功能。谢谢介绍。
    【解决方案3】:

    我们可以转换成tibblefilter

    library(dplyr)
    tibble(v) %>% 
      filter(v != 0) %>%
      nrow
    #[1] 2
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2018-07-18
      • 2016-08-08
      • 2022-06-14
      • 2017-06-30
      相关资源
      最近更新 更多