如何在R中按多条件统计同一列内CPC的跨行关联出现次数
解决方法
步骤说明
你的核心问题是没有限定仅统计Y02系列CPC与非Y02系列CPC的关联,且没有按专利维度生成跨组配对。以下是修正后的完整流程:
1. 准备数据与定义Y02系列CPC
首先明确Y02系列的CPC范围,同时导入示例数据(如果你的数据框不是y,替换成实际名称即可):
# 示例数据(替换为你的实际数据框) y <- data.frame( patent_id = c(rep("xxxxxx",4), rep("yyyyyy",4)), CPC = c("Y02P", "H01M", "G01H", "A02A", "A01B", "Y02E", "Y02T", "Y04S") ) # 定义Y02系列CPC列表 y02_cpcs <- c("Y02A", "Y02B", "Y02C", "Y02D", "Y02E", "Y02P", "Y02T", "Y02W", "Y04S")
2. 生成Y02与非Y02的专利内配对
按专利分组,拆分Y02和非Y02的CPC,生成跨组配对(确保每个Y02 CPC仅和同专利下的非Y02 CPC关联):
library(dplyr) library(tidyr) pair_data <- y %>% group_by(patent_id) %>% mutate( is_y02 = CPC %in% y02_cpcs, y02_list = list(CPC[is_y02]), # 每个专利的Y02类CPC集合 non_y02_list = list(CPC[!is_y02]) # 每个专利的非Y02类CPC集合 ) %>% slice(1) %>% # 每个专利仅保留一行,避免重复生成配对 unnest(y02_list) %>% unnest(non_y02_list) %>% rename(y02_cpc = y02_list, non_y02_cpc = non_y02_list) %>% ungroup()
3. 统计关联次数并找出最高关联CPC
统计每个Y02 CPC对应的非Y02 CPC的共同出现次数,再筛选出每个Y02 CPC关联最多的非Y02 CPC:
# 统计关联次数 count_data <- pair_data %>% group_by(y02_cpc, non_y02_cpc) %>% summarise(assoc_count = n(), .groups = "drop") # 找出每个Y02类的最高关联非Y02 CPC top_assoc <- count_data %>% group_by(y02_cpc) %>% slice_max(assoc_count, n = 1, with_ties = FALSE) %>% # with_ties=FALSE表示只取一个最高值,若要保留并列可设为TRUE ungroup() # 查看结果 print(top_assoc)
结果示例
针对你的示例数据,运行后会得到:
| y02_cpc | non_y02_cpc | assoc_count |
|---|---|---|
| Y02E | A01B | 1 |
| Y02P | H01M | 1 |
| Y02P | G01H | 1 |
| Y02P | A02A | 1 |
| Y02T | A01B | 1 |
| Y04S | A01B | 1 |
(注:示例数据中每个Y02 CPC仅对应一个专利的非Y02 CPC,所以次数均为1;若有更多数据,会显示实际关联次数)
内容的提问来源于stack exchange,提问作者user17563853
相关产品推荐
相关产品推荐

