【问题标题】:Count pairs in the same column based on a common value in another column根据另一列中的共同值计算同一列中的对
【发布时间】:2021-12-19 22:03:43
【问题描述】:

为简化起见,我有一个包含两列的表格,第一列是“文章 doi 编号”,另一列是“出版公司”。这是从表格中截取的一个长示例:

   article_doi_number      publishing_company
1            10.24397                elsevier
2            10.24397         emerald insight
3            10.24397                   jstor
4            10.24397             tandfonline
5            10.24397          wiley and sons
6            10.24397           sage journals
7            10.18150                elsevier
8            10.18150          wiley and sons
9            10.18150         emerald insight
10           10.60920           gale academic
11           10.60920                proquest
12           10.60920           springer link
13           10.60920                   jstor
14           10.80442         ingenta connect
15           10.80442                  pubmed
16           10.21337 harvard business review
17           10.21337                proquest
18           10.80416                    plos
19           10.80431           research gate
20           10.80431                proquest
21           10.70125                    ieee
22           10.81093               frontiers
23           10.33542                  scielo
24           10.33542                  pubmed
25           10.81100 harvard business review
26           10.81100                proquest
27           10.33586                elsevier
28           10.33586          wiley and sons
29           10.33586           sage journals
30           10.33586           gale academic
31           10.33586                proquest
32           10.33586           research gate

我想返回这对出版公司的名称(在同一列或不同列中,没关系)以及它们在不同/唯一文章 doi 编号中一起出现的频率。例如,elsevier 和 wiley and sons 是出现频率最高的一对(3 次)。

我想建立的另一件事是,再次返回这对出版公司的名称(这不管是发生在不同的列中还是发生在一个列中都无关紧要),但现在我想返回如何计算它们经常一起出现在唯一的文章 doi 编号中,这些编号由各自的出版公司单独出版。例如,哈佛商业评论和 proquest 是仅发表一篇文章(2 次)的最受欢迎的组合。

我尝试了一些使用 group by、count 等的查询(使用 SQLite),但还差得很远。也尝试过,数据透视表但数据太大(超过了 excel 中的最大列限制)。我也愿意接受使用 R 的答案,但最喜欢 SQL 查询。

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它会破坏屏幕阅读器并且无法复制或搜索(参考:meta.stackoverflow.com/a/285557xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。
  • 您好@killerstein,请提供minimal reproducible example,以便其他 SO 用户以最佳方式帮助您

标签: sql r sqlite count combinations


【解决方案1】:

你可以这样做:

select a.publishing_company , b.publishing_company , count(*) cnt
from tablename a 
join tablename b
   on a.article_doi_number = b.article_doi_number
   and a.id < b.id 
group by a.publishing_company , b.publishing_company
order by cnt desc

db小提琴here

您可以在末尾limit 1 仅显示第一行。

【讨论】:

  • 非常感谢。除了尝试形成一个全新的数据库或表之外,我真的想不出将同一列记录分成不同表的方法。我主要专注于尝试在出版公司矩阵中计算二进制值。即使那样,我也会犯一个致命的错误,我完全忽略了主键因素。我在想这是否有必要以及如何实施。现在我有了明确的指导。
猜你喜欢
  • 1970-01-01
  • 2014-08-10
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2021-08-09
  • 2019-03-09
相关资源
最近更新 更多