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

在R中实现多列文本关键词共现统计与交叉制表的方法问询

关键词共现交叉表解决方案

需求说明

针对包含论文标题(TI)和摘要(AB)的数据框,统计**TI列含cancer/CVD与AB列含pancreatic(含变体)/diet**的条目共现情况,生成交叉统计表。

可复现示例数据

# 创建示例数据框
TI <- c('Studies of pancreatic cancer',
        'colon, breast, and pancreatic cancer',
        'cancer and CVD paper', 
        'CVD paper'
        )
AB <- c('Autoimmune pancreatitis (AIP) is now considered a disease to be treated by diet.',
        'dietary patterns, positive associations were found between pancreatic cancer risk ',
        'Cardiovascular diseases (CVD) is linked to Diet',
        'making this match with pancreas'
        )

df <- data.frame(TI, AB)
# 字段说明:TI = 论文标题,AB = 论文摘要

实现步骤

1. 为每条数据添加关键词匹配标记

通过grepl()函数标记每条数据是否命中目标关键词,方便后续统计:

# 标记TI列是否包含cancer或CVD
df$TI_has_cancer <- grepl("cancer*", df$TI, ignore.case = TRUE)
df$TI_has_CVD <- grepl("CVD", df$TI, ignore.case = TRUE)

# 标记AB列是否包含pancreatic变体或diet
df$AB_has_pancreatic <- grepl("pancreat*", df$AB, ignore.case = TRUE)
df$AB_has_diet <- grepl("diet*", df$AB, ignore.case = TRUE)

2. 生成交叉表

可根据需求选择两种生成方式:

方式1:合并分组的交叉表

将TI列的关键词合并为分组(含cancer、含CVD、同时含两者、都不含),再与AB列的关键词分组做交叉统计:

# 加载dplyr包(未安装则先执行 install.packages("dplyr"))
library(dplyr)

# 创建TI分组列
df$TI_group <- case_when(
  df$TI_has_cancer & df$TI_has_CVD ~ "cancer + CVD",
  df$TI_has_cancer ~ "cancer",
  df$TI_has_CVD ~ "CVD",
  TRUE ~ "Neither"
)

# 创建AB分组列
df$AB_group <- case_when(
  df$AB_has_pancreatic & df$AB_has_diet ~ "pancreatic + diet",
  df$AB_has_pancreatic ~ "pancreatic",
  df$AB_has_diet ~ "diet",
  TRUE ~ "Neither"
)

# 生成交叉表
cross_table <- table(TI_Group = df$TI_group, AB_Group = df$AB_group)

# 查看结果
print(cross_table)

运行后输出结果:

AB_Group
TI_Group   pancreatic pancreatic + diet diet Neither
  cancer            0                 2    0       0
  cancer + CVD      0                 0    1       0
  CVD               1                 0    0       0

方式2:单个关键词的交叉表

如果需要单独查看TI列中cancer/CVD分别与AB列关键词的共现情况,可直接生成两两交叉表:

# TI含cancer vs AB关键词的交叉表
table(TI_Cancer = df$TI_has_cancer, AB_Keyword = df$AB_group)

# TI含CVD vs AB关键词的交叉表
table(TI_CVD = df$TI_has_CVD, AB_Keyword = df$AB_group)

补充说明

  • grepl()比grep()更适合标记,因为它直接返回逻辑值(TRUE/FALSE),方便后续统计
  • 正则表达式pancreat*可以匹配pancreatic、pancreatitis、pancreas等变体
  • 若需要更美观的表格输出,可以使用knitr::kable(cross_table)将交叉表转为格式化表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:50:34