如何高效计算R语言中多列元素的出现频率?
计算多列中各唯一值的总出现次数
你可以用以下几种简洁的方法来实现需求:
方法1:扁平化数据后用table()
直接把数据框转为向量,再用table()统计,这是最直观的方式:
x <- c(1,2,3) y <- c(2,3,1) z <- c(3,2,2) df <- data.frame(x,y,z) # 扁平化数据并统计 table(unlist(df))
输出结果会直接显示每个值的总出现次数:
1 2 3 2 4 3
方法2:用tidyverse工具集(适合数据框操作)
如果习惯用tidyverse的语法,可以先将数据转为长格式再计数:
library(dplyr) library(tidyr) df %>% pivot_longer(cols = everything(), # 选中所有列 names_to = "列名", values_to = "数值") %>% count(数值)
输出结果是一个数据框,清晰展示每个值的计数:
数值 n <int> <int> 1 1 2 2 2 4 3 3 3
方法3:针对指定值直接求和
如果已经明确要统计的唯一值是1、2、3,可以直接计算每个值在所有列中的出现总和:
sapply(c(1,2,3), function(val) sum(df == val))
输出结果为:
1 2 3 2 4 3
为什么直接用table(df)不行?
直接运行table(df)会生成列与列之间的交叉频数表,展示的是每列值的组合出现次数,而不是所有列中单个值的总计数,这就是你没得到预期结果的原因。
内容的提问来源于stack exchange,提问作者kthomas
相关产品推荐
相关产品推荐

