You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用data.table对取值范围相同的多列变量单独统计频次

解决方案

针对你的需求,使用data.table的melt()和dcast()函数组合就能高效实现,具体步骤如下:

完整代码实现

library(data.table)

# 输入数据
foo <- data.table(a = c(1,3,2,3,3), b = c(2,3,3,1,1), c = c(3,1,2,3,2))

# 一步完成转长、计数、转宽操作
result <- dcast(
  melt(foo, measure.vars = names(foo), variable.name = "col", value.name = "levels"),
  levels ~ col,
  value.var = "N",
  fill = 0 # 可选:若某level在列中无数据,填充0
)

print(result)

输出结果

levels a b c
1:      1 1 2 1
2:      2 1 1 2
3:      3 3 2 2

逻辑说明

  1. melt():将原宽表转为长格式,把所有待统计的列(a、b、c)整合到col列,对应的值存入levels列;
  2. 分组计数:melt后的表会自动按col和levels分组统计频次(生成N列);
  3. dcast():将长格式结果转回宽格式,以levels为行,原列名为列,填充对应的频次值。

如果你的数据中可能存在某个level在某列无记录的情况,fill = 0参数可以确保这些位置被填充为0,避免缺失值。

内容的提问来源于stack exchange,提问作者sant_andria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:25:19