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

如何仅用dplyr与base-R生成指定的交叉计数汇总表格?

用base R和dplyr生成交叉汇总表

原始数据

首先是用于生成汇总表的原始数据:

vector_one = c("name1", "name2", "name1", "name2", "name2", "name1")
vector_two = c("apple", "apple", "grape", "grape", "grape", "apple")
my_df = cbind(vector_one, vector_two)

对应的原始数据表:

vector_onevector_two
name1apple
name2apple
name1grape
name2grape
name2grape
name1apple

目标汇总表

需要生成的目标格式汇总表如下:

table_vec = cbind(c("name" = c(2,1)), c("name" = c(1,2)))
colnames(table_vec) = c("apple", "grape")
table_vec

对应的数据表:

applegrape
name121
name212

解决方案

1. base R 方法

base R 中可以直接使用table()函数快速生成交叉频数表,这是最简洁的方式:

# 直接生成交叉频数表
table_result <- table(my_df[, "vector_one"], my_df[, "vector_two"])
# 确保列名和行名与目标一致
colnames(table_result) <- c("apple", "grape")
rownames(table_result) <- c("name1", "name2")

table_result

执行后会输出:

apple grape
name1     2     1
name2     1     2

2. dplyr 方法

需要结合dplyr的分组计数和tidyr的宽格式转换(pivot_wider)来实现,步骤如下:

library(dplyr)
library(tidyr)

# 先将矩阵转换为数据框(dplyr更适配数据框格式)
my_df_df <- as.data.frame(my_df) %>%
  mutate(across(everything(), as.character))

# 分组计数并转换为宽格式
dplyr_result <- my_df_df %>%
  # 按两个变量分组
  group_by(vector_one, vector_two) %>%
  # 统计每组的行数
  summarise(count = n(), .groups = "drop") %>%
  # 将vector_two的类别转为列,count作为对应值,缺失组合填0
  pivot_wider(names_from = vector_two, values_from = count, values_fill = 0) %>%
  # 将vector_one列转为行名
  column_to_rownames("vector_one")

dplyr_result

执行后得到的结果与目标格式完全一致:

apple grape
name1     2     1
name2     1     2

内容的提问来源于stack exchange,提问作者Salomão Guedes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:17