【问题标题】:count number of rows where value in two columns are both true计算两列中的值都为真的行数
【发布时间】:2019-08-29 11:05:21
【问题描述】:

我有一个包含两列逻辑的数据集,我想计算两列的值都为真的行数。

这是一个示例数据集,其中包含两个值都为 true 的两行:

df <- data.frame(
    column_A = c(TRUE, TRUE, FALSE, TRUE, FALSE),
    column_B = c(FALSE, TRUE, TRUE, TRUE, FALSE)
)

这两个怎么算?

我知道如何使用 dplyr 执行此操作(在 A 列为真且 B 列为真的条件下进行过滤,然后计数)但我想将其包含在我正在编写的函数中,老实说我不知道'不明白怎么做,因为 dplyr 使用非标准评估。

我觉得可能有一种非常简单的方法可以使用基础 R 中的函数来执行此操作,但我迷路了,而且在谷歌搜索方面没有太多运气。任何帮助将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    简单!你可以做sum(df$column_A &amp; df$column_B)df$column_A &amp; df$column_B 返回一个逻辑向量,然后可以将其馈送到sum() 以确定TRUE 有多少个值。

    如果您想知道column_Acolumn_B 都是TRUE 的行的索引,可以使用which(df$column_A &amp; df$column_B)

    【讨论】:

      【解决方案2】:
      Reduce("&", df[c("column_A", "column_B")])
      #[1] FALSE  TRUE FALSE  TRUE FALSE
      

      【讨论】:

        【解决方案3】:

        如果您只需要知道这两列,您可以取条件的总和:

        sum(df$column_A & df$column_B)
        

        【讨论】:

          【解决方案4】:

          你可以使用rowSums

          sum(rowSums(df) == ncol(df))
          #[1] 2
          

          为了对选定的列执行此操作,我们可以这样做

          cols <- c("column_A", "column_B")
          sum(rowSums(df[cols])  == length(cols))
          

          我们也可以使用apply

          sum(apply(df[cols], 1, all))
          

          或者dplyrfilter_at

          library(dplyr)
          df %>% filter_at(cols, all_vars(.)) %>% nrow
          

          【讨论】:

          • 对不起,我想我用的例子太少了。我正在使用的实际数据集有二十多列逻辑,但我只想对其中两个进行比较
          • @Jeremy 更新了对选定列执行此操作的答案。
          【解决方案5】:

          或者使用tidyverse(类似于@d.b的base R方法)

          library(dplyr)
          library(purrr)
          df %>%
             summarise(out = sum(reduce(., `&`)))
          #  out
          #1   2
          

          【讨论】:

            猜你喜欢
            • 2018-03-24
            • 2016-09-19
            • 1970-01-01
            • 1970-01-01
            • 2015-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多