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

在R中按多列聚合并将geo分组转为列展示计数的方法

解决方案

首先修正你的示例数据生成代码,cbind会返回矩阵,需要转为数据框并修正数据类型:

id <- c(1,2,3,4,5,6,7,8,9,10,11,12)
product <- c('x', 'y', 'z', 'r', 'z', 'x', 'z', 'y', 'w', 'z', 'w', 'w')
education <- c('A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'A', 'C', 'C')
geo<- c('F1', 'F1', 'F2', 'F2', 'F2', 'F2', 'F2', 'F3', 'F3', 'F1', 'F3', 'F4')
df <- data.frame(id, product, education, geo, stringsAsFactors = FALSE)

你需要按product、education(若实际数据包含sex,请将其加入分组条件)分组,统计每个组下不同geo的出现次数,并将geo转为列展示。可以用dplyr结合tidyr实现:

library(dplyr)
library(tidyr)

result <- df %>%
  # 按目标维度分组,有sex则添加到group_by参数中
  group_by(product, education, geo) %>%
  # 统计每个组合的行数
  tally() %>%
  # 将geo转为列,缺失的geo填充0
  pivot_wider(names_from = geo, values_from = n, values_fill = 0) %>%
  # 取消分组
  ungroup()

print(result)

输出结果:

# A tibble: 8 × 6
  product education    F1    F2    F3    F4
  <chr>   <chr>     <int> <int> <int> <int>
1 r       B             0     1     0     0
2 w       C             0     0     2     1
3 x       A             1     0     0     0
4 x       B             0     1     0     0
5 y       A             1     0     0     0
6 y       C             0     0     1     0
7 z       A             1     0     0     0
8 z       B             0     3     0     0

如果需要先对product、sex、education的组合去重,再统计geo计数,可在tally()前添加distinct():

result <- df %>%
  distinct(product, education, geo, .keep_all = FALSE) %>%
  group_by(product, education, geo) %>%
  tally() %>%
  pivot_wider(names_from = geo, values_from = n, values_fill = 0) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:05:11