计算两列的值均为true的行数

时间:2019-08-29 02:34:29

标签: r

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

这是一个包含两行的样本数据集,其中两个值都为真:

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

我怎么算这两个?

我知道如何使用dplyr(在A列为TRUE且B列为True的情况下进行过滤,然后计数),但是我想将此包含在我正在编写的函数中,老实说我不知道因为dplyr使用非标准评估,所以不知道该怎么做。

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

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

Reduce("&", df[c("column_A", "column_B")])
#[1] FALSE  TRUE FALSE  TRUE FALSE

答案 2 :(得分:2)

您可以使用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))

或与dplyr filter_at

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

答案 3 :(得分:2)

如果只需要了解这两列,则可以求和以下条件的总和:

sum(df$column_A & df$column_B)

答案 4 :(得分:0)

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

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