R语言如何汇总统计多列不同水平因子的出现次数
因子列分类计数问题的修正实现
现有代码的核心错误
- 语法层面括号闭合错位:原代码中过短、过长计数的
count()参数没有正确闭合,把整段判断逻辑错误传入函数,运行就会直接触发语法报错 - 统计逻辑偏差:代码中先求频次表再做等式判断的写法返回的是布尔值向量,不是各分类的实际出现次数
- 未兼容数据笔误:没有匹配数据中出现的"too shot"错写的过短类取值,会导致过短计数比实际值偏低
- 输出结构错位:sapply返回的矩阵转置后,无法直接对应目标格式的四列统计维度
可直接运行的修正代码
# 1. 统一所有过短类取值,兼容笔误 df[] <- lapply(df, function(col) { # 补全因子水平,避免替换值不在原有水平时报错 levels(col) <- c(levels(col), "too short") col[col == "too shot"] <- "too short" return(col) }) # 2. 逐列统计四类取值的出现次数 result_df <- t(sapply(names(df), function(col) { col_vals <- df[[col]] # 直接对列内的匹配值求和得到计数,自动过滤空值 cnt_valid <- sum(col_vals == "valid value", na.rm = TRUE) cnt_invalid <- sum(col_vals == "invalid value", na.rm = TRUE) cnt_short <- sum(col_vals == "too short", na.rm = TRUE) cnt_long <- sum(col_vals == "too long", na.rm = TRUE) return(c( 有效取值计数 = cnt_valid, 无效取值计数 = cnt_invalid, 过短取值计数 = cnt_short, 过长取值计数 = cnt_long )) })) # 3. 调整格式匹配目标输出 result_df <- data.frame( 变量名 = rownames(result_df), result_df, row.names = NULL )
结果说明
运行上述代码后输出的result_df结构完全匹配参考格式,每一行对应一个输入的原始列,四列分别对应该列的有效、无效、过短、过长类别的取值计数;其中过短计数已经自动覆盖了"too short"和原数据里笔误的"too shot"两类过短取值,不会出现漏统计的情况。
内容的提问来源于stack exchange,提问作者Ifeanyi
相关产品推荐
相关产品推荐

