根据另一列中的公共值计算同一列中的对
Count pairs in the same column based on a common value in another column
为了简化,我有一个包含两列的 table,第一列是“文章 doi 编号”,另一列是“出版公司”。这是从 table:
中截取的一个长示例
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
我想return这对出版公司的名称(在同一栏或不同栏中,无所谓)以及它们一起出现在distinct/unique文章中的频率doi 号码。例如,elsevier 和 wiley and sons 是出现频率最高的一对(3 次)。
我想确定的另一件事是,再次 return 这对出版公司的名称(同样,无论是在不同的栏目中还是在一个栏目中,这都无关紧要),但现在我想要 return 计算它们一起出现在由各自出版公司单独出版的唯一文章 doi 编号中的频率。例如,harvard business review 和 proquest 是最受欢迎的一对,仅发表一篇文章(2 次)。
我尝试了一些查询(使用 SQLite),包括分组依据、计数等,但还差得远。还尝试过 pivot table 但数据太大(超过 excel 中的最大列限制)。我也愿意接受使用 R 的答案,但最喜欢 SQL 查询。
这里是你如何做到的:
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<>fiddle here
您可以在最后 limit 1
只显示第一行。
为了简化,我有一个包含两列的 table,第一列是“文章 doi 编号”,另一列是“出版公司”。这是从 table:
中截取的一个长示例 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
我想return这对出版公司的名称(在同一栏或不同栏中,无所谓)以及它们一起出现在distinct/unique文章中的频率doi 号码。例如,elsevier 和 wiley and sons 是出现频率最高的一对(3 次)。
我想确定的另一件事是,再次 return 这对出版公司的名称(同样,无论是在不同的栏目中还是在一个栏目中,这都无关紧要),但现在我想要 return 计算它们一起出现在由各自出版公司单独出版的唯一文章 doi 编号中的频率。例如,harvard business review 和 proquest 是最受欢迎的一对,仅发表一篇文章(2 次)。
我尝试了一些查询(使用 SQLite),包括分组依据、计数等,但还差得远。还尝试过 pivot table 但数据太大(超过 excel 中的最大列限制)。我也愿意接受使用 R 的答案,但最喜欢 SQL 查询。
这里是你如何做到的:
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<>fiddle here
您可以在最后 limit 1
只显示第一行。