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

如何统计两个DataFrame中同列不同类别值的匹配数量?

解决方案

根据你的需求,以下是几种常见的匹配统计实现方案,基于dplyr完成:

1. 合并两个DataFrame的统计结果,展示所有类别及双方计数

该方案会汇总所有出现过的类别,同时显示每个类别在DF1和DF2中的出现次数,并标记是否为共同类别:

library(dplyr)

DF1 <- data.frame(Firm1 = c("A", "B", "C", "L", "M", "L"))
DF2 <- data.frame(Firm2 = c("L", "M", "N", "P"))

# 对两个DataFrame分别做分组计数,统一列名便于合并
df1_count <- DF1 %>% 
  group_by(Firm = Firm1) %>% 
  summarise(count_df1 = n(), .groups = "drop")

df2_count <- DF2 %>% 
  group_by(Firm = Firm2) %>% 
  summarise(count_df2 = n(), .groups = "drop")

# 全连接合并,填补缺失计数为0,标记共同类别
combined_result <- full_join(df1_count, df2_count, by = "Firm") %>% 
  mutate(
    count_df1 = ifelse(is.na(count_df1), 0, count_df1),
    count_df2 = ifelse(is.na(count_df2), 0, count_df2),
    is_common = count_df1 > 0 & count_df2 > 0
  )

print(combined_result)

执行后输出:

Firm count_df1 count_df2 is_common
1    A         1         0     FALSE
2    B         1         0     FALSE
3    C         1         0     FALSE
4    L         2         1      TRUE
5    M         1         1      TRUE
6    N         0         1     FALSE
7    P         0         1     FALSE

2. 仅统计DF1中与DF2重叠的类别及计数

如果只需要DF1里同时出现在DF2中的类别及其出现次数:

df1_common <- df1_count %>% 
  filter(Firm %in% df2_count$Firm)

print(df1_common)

执行后输出:

Firm count_df1
1    L         2
2    M         1

3. 仅统计DF2中与DF1重叠的类别及计数

如果只需要DF2里同时出现在DF1中的类别及其出现次数:

df2_common <- df2_count %>% 
  filter(Firm %in% df1_count$Firm)

print(df2_common)

执行后输出:

Firm count_df2
1    L         1
2    M         1

注意点

之前使用%in%未成功,大概率是没有先提取对方DataFrame的类别向量(比如直接在分组内使用而非筛选环节),或者未统一类别列的名称,导致匹配逻辑出错。上述方案通过先统一列名、提取类别向量,再在filter中使用%in%实现精准匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:55:22