我有一个包含两列逻辑的数据集,我想计算两列均为真的行数。
这是一个包含两行的样本数据集,其中两个值都为真:
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中的一个函数来执行此操作,但是我迷路了,没有太多运气。任何帮助将不胜感激。
答案 0 :(得分:4)
简单!您可以执行sum(df$column_A & df$column_B)
。 df$column_A & df$column_B
返回一个逻辑向量,然后可以将其馈送到sum()
,以确定TRUE
有多少个值。
如果您想知道column_A
和column_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