如何统计整个DataFrame中指定字符串的出现次数?
统计DataFrame中特定字符串的总出现次数
你遇到的问题是因为grep("setosa", df)默认会处理数据框的列名,而你的列名里没有"setosa",所以返回空向量,长度为0。下面是几种可行的解决方案:
方法1:Base R 精确匹配(高效)
如果是完全匹配"setosa"这个字符串,直接将数据框转为一维向量后统计:
sum(unlist(df) == "setosa")
unlist(df)会把数据框的所有列拼接成一个连续的向量== "setosa"生成布尔值向量,sum()自动将TRUE计为1、FALSE计为0,最终得到总次数
方法2:Base R 正则匹配(支持模糊匹配)
如果需要用正则表达式匹配(比如匹配包含"set"的字符串),可以用grepl结合矩阵转换:
sum(grepl("setosa", as.matrix(df)))
as.matrix(df)将数据框转为矩阵,grepl会逐元素检查是否匹配目标正则- 最后用
sum()汇总所有匹配成功的次数
方法3:dplyr 风格统计
如果你习惯使用tidyverse工具链,可以遍历所有列统计后求和:
library(dplyr) total_setosa <- df %>% summarize(across(everything(), ~sum(.x == "setosa"))) %>% rowSums() total_setosa
across(everything(), ~sum(.x == "setosa"))对每一列单独统计"setosa"的出现次数,生成单行统计结果rowSums()将各列的统计值相加,得到整个数据框的总次数
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

