如何在R中统计data.frame里YES与NO的词频
R 中统计两类文本取值频次的实现方法
注意:你提供的示例数据中第5条的YES取值末尾附带多余空格,直接统计会被识别为独立类别造成计数偏差,所有方法第一步都需要先用
trimws()清除字符串前后的空白字符。
方法1:基础R 原生table()函数实现
- 代码步骤:
- 清洗Answer列的多余空白:
df$Answer <- trimws(df$Answer) - 直接调用table完成计数:
table(df$Answer)
运行后控制台输出效果和你给出的示例完全一致:
如果发现输出的类别顺序错位(NO排在YES前面),可以手动指定因子水平修正:YES NO 4 2table(factor(df$Answer, levels = c("YES", "NO"))) - 清洗Answer列的多余空白:
方法2:tidyverse生态写法
- 需提前加载对应包:
library(dplyr)library(tidyr) - 链式操作完成全流程处理:
输出结果为标准data.frame结构,列名和计数结果完全匹配预期。df %>% # 清除Answer列的多余空格 mutate(Answer = trimws(Answer)) %>% # 按Answer的类别分组计数 count(Answer, name = "cnt") %>% # 转换为横向单行的宽表格式 pivot_wider(names_from = Answer, values_from = cnt)
方法3:逻辑判断直接计数(可控性最高)
- 无需依赖第三方包,手动指定列名可以完全避免顺序错位问题:
直接运行# 先清洗字符串 cleaned_answer <- trimws(df$Answer) # 计算每个类别的计数并生成结果表 result <- data.frame( YES = sum(cleaned_answer == "YES"), NO = sum(cleaned_answer == "NO") )result即可得到和示例完全一致的输出效果。
内容的提问来源于stack exchange,提问作者John_Average
相关产品推荐
相关产品推荐

