如何在R中统计data.frame各列中特定值'?'的出现次数
问题原因说明
你之前计数错误的核心原因有两个:
- 你的数据集是tibble结构,用
[,列号]取列返回的是子tibble而非向量,逻辑判断时会出现不符合预期的结果,应该用[[列号]]或者$列名取向量。 - 从你打印的单元格结果来看,存储的
?自带单引号,实际值是'?'而非纯?,所以直接判断== "?"无法匹配。
可行解决方案
方法1:精确匹配(计数最准确,推荐)
根据你实际存储的字符选择对应代码即可实现逐列统计:
# 匹配值为纯?的单元格 colSums(sapply(phpvqZpLa, function(col) col == "?"), na.rm = TRUE) # 匹配值为带单引号'?'的单元格,适配你当前的数据集 colSums(sapply(phpvqZpLa, function(col) col == "'?'"), na.rm = TRUE)
方法2:模糊匹配(避免隐藏字符/空格干扰)
如果存在值前后带空格、或者有其他隐藏字符的情况,可以用模糊匹配统计所有含?的单元格:
colSums(sapply(phpvqZpLa, function(col) grepl("\\?", col)), na.rm = TRUE)
其他说明
frequency()是时间序列场景专用函数,用来统计单位时间内的样本量,不适合用来做普通值的频次统计,之前的使用不符合函数设计场景。- 如果你想用
table()实现也可以,单列统计可以写为table(phpvqZpLa[[6]], useNA = "ifany")["'?'"],多列的话套入sapply即可使用。
内容的提问来源于stack exchange,提问作者oak tree
相关产品推荐
相关产品推荐

