如何在DataFrame中按条件统计值的数量?无需列名或索引自动统计各列TRUE与FALSE值数量的实现方法
自动统计DataFrame每列TRUE/FALSE数量的解决方案
嘿,这个需求我太懂了!要自动统计逻辑型DataFrame每列的TRUE和FALSE出现次数,还不用手动指定列名或索引,完全自动化处理,下面给你几个实用的方法:
基础R方法(无需额外包)
这是最直接的方案,用apply函数遍历每列,结合table()统计频次:
# 你的示例数据 df1 <- c(TRUE,TRUE,FALSE,TRUE,TRUE) df2 <- c(TRUE,FALSE,FALSE,TRUE,TRUE) df3 <- c(FALSE,TRUE,TRUE,TRUE,TRUE) df <- data.frame(df1,df2,df3) # 自动统计每列的TRUE/FALSE数量 result <- as.data.frame(t(apply(df, 2, table))) # 查看结果 print(result)
运行后会得到你想要的输出:
df1 df2 df3 TRUE 4 3 4 FALSE 1 2 1
代码解释:
apply(df, 2, table):MARGIN=2表示按列处理数据,table()会自动统计当前列中TRUE和FALSE的出现次数t():转置结果,因为默认table()输出的结构是「列名作为行,TRUE/FALSE作为列」,转置后就变成我们需要的「TRUE/FALSE作为行,原列名作为列」的格式as.data.frame():把转置后的矩阵转换成数据框,方便后续操作
这个方法完全不需要指定任何列名或索引,不管你的数据框有多少列,都能自动批量处理。
tidyverse风格方法(可选)
如果你习惯用tidyverse工具链,也可以用purrr或dplyr实现:
用purrr包:
library(purrr) result <- map_df(df, table) %>% t() %>% as.data.frame()
用dplyr包:
library(dplyr) result <- df %>% summarise_all(~table(.)) %>% t() %>% as.data.frame()
这两种方法的效果和基础R方案完全一致,只是写法更符合tidyverse的风格。
内容的提问来源于stack exchange,提问作者user18948933
相关产品推荐
相关产品推荐

