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

如何基于频率将长格式数据转为宽格式?附R语言示例

将长格式数据转换为频率统计宽格式的实用方法

这里提供两种高效的R语言实现方式,满足你的需求:

方法一:使用tidyverse工具链(dplyr + tidyr)

tidyverse是处理数据框的常用工具集,步骤清晰易懂:

首先加载包并定义原数据:

library(tidyverse)

dat <- data.frame(
  city = c('A','A','B','C','A','B','B','C','C','C'), 
  color = c('red', 'green', 'blue', 'red', 'green', 'blue', 'green', 'blue', 'red', 'red'),
  sex = c('M','F','F','M','F','F','F','M','F','M')
)

分三步处理:

  1. 统计每个city下各color的出现次数,并转成宽格式(缺失值补0)
  2. 统计每个city下各sex的出现次数,同样转成宽格式
  3. 按city合并两个结果表
# 处理color变量的频数统计与转宽
color_counts <- dat %>%
  count(city, color) %>%
  pivot_wider(names_from = color, values_from = n, values_fill = 0)

# 处理sex变量的频数统计与转宽
sex_counts <- dat %>%
  count(city, sex) %>%
  pivot_wider(names_from = sex, values_from = n, values_fill = 0)

# 合并结果
final_result <- left_join(color_counts, sex_counts, by = "city")

# 输出结果
final_result

运行后输出:

# A tibble: 3 × 6
  city    red green blue     F     M
  <chr> <int> <int> <int> <int> <int>
1 A         1     2     0     2     1
2 B         0     1     2     3     0
3 C         3     0     1     1     3

方法二:使用data.table包

如果处理大数据集,data.table的运行效率更高:

加载包并转换为data.table格式:

library(data.table)

setDT(dat)

分步骤处理:

# 转宽并统计color的频数
color_dt <- dcast(dat, city ~ color, fun.aggregate = length, value.var = "color", fill = 0)

# 转宽并统计sex的频数
sex_dt <- dcast(dat, city ~ sex, fun.aggregate = length, value.var = "sex", fill = 0)

# 合并结果
final_result_dt <- merge(color_dt, sex_dt, by = "city")

# 输出结果
final_result_dt

输出结果与tidyverse方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:55:16