从Dataframe中的计数实例创建2x2条件表

从Dataframe中的计数实例创建2x2条件表,r,dplyr,datatable,contingency,statistical-test,R,Dplyr,Datatable,Contingency,Statistical Test,我有一个按作者性别、作者在项目中的角色和标识符(PMID)细分的数据框架(见下文) 我需要的是创建一个2x2列联表,这样我就可以计算成为女性第一作者和拥有女性资深作者之间关联的优势比。为此,我需要计算以下各项: 答:第一作者是女性,资深作者是女性的次数 B:第一作者是女性,第二作者是男性的次数 C:第一作者为男性,资深作者为男性的次数 D:第一作者为男性,第二作者为女性的次数 (显然,如果只有一名高级职员或一名高级职员 第一作者(每个PMID) 我已经按照PMID对表(见下文)进行了分组,所

我有一个按作者性别、作者在项目中的角色和标识符(PMID)细分的数据框架(见下文)

我需要的是创建一个2x2列联表,这样我就可以计算成为女性第一作者和拥有女性资深作者之间关联的优势比。为此,我需要计算以下各项:

  • 答:第一作者是女性,资深作者是女性的次数
  • B:第一作者是女性,第二作者是男性的次数
  • C:第一作者为男性,资深作者为男性的次数
  • D:第一作者为男性,第二作者为女性的次数 (显然,如果只有一名高级职员或一名高级职员 第一作者(每个PMID)
我已经按照PMID对表(见下文)进行了分组,所以我真的只需要弄清楚如何计算上面的每个实例。有困难的时候,将非常感谢任何帮助


# A tibble: 178,056 x 3
# Groups:   pmid [101,907]
    gender authorship pmid    
    <chr>  <chr>      <chr>   
  1 male   First      18958667
  2 male   Senior     18958667
  3 male   First      18958651
  4 male   First      18751818
  5 male   Senior     18751818
  6 male   First      18751811
  7 male   Senior     18751811
  8 female First      18751810
  9 female Senior     18751810
 10 male   First      18088800
 11 male   Senior     18088800
 12 male   First      17710072
 13 female First      17977216
 14 male   Senior     17762065
 15 male   First      17611457
 16 male   First      17611433
 17 male   First      17532688
 18 male   Senior     17532688
 19 female First      17405310
 20 male   Senior     17386862
 21 female First      17319096
 22 male   Senior     17319096
 23 female First      17300028
 24 male   First      17282480
 25 female First      17177771
 26 male   First      17124681
 27 female First      17093906
 28 female First      17042011
 29 male   Senior     17042011
 30 female First      17042010
 31 male   Senior     17042010
 32 female First      17042006
 33 male   Senior     17042006
 34 female First      17042003
 35 female First      17042002
 36 male   Senior     17042002
 37 male   First      17042001
 38 female First      17041999
 39 male   Senior     17041997
 40 female First      17041995
 41 female First      17041994
 42 female First      17041993
 43 female Senior     17041993
 44 female First      17041992
 45 female Senior     17041992
 46 female First      17041991
 47 male   First      17041990
 48 male   Senior     17041990
 49 male   First      17041989
 50 male   Senior     17041989


#A tibble:178056x3
#分组:pmid[101907]
性别作者pmid
1男首18958667
2男高中生18958667
3男性优先18958651
4男性优先18751818
5男高中生18751818
6男性优先18751811
7男高中生18751811
8女性优先18751810
9女高中生18751810
10男首18088800
11男高中生18088800
12男首17710072
13女性优先17977216
14男高中生17762065
15男第一17611457
16男首17611433
17男一17532688
18男高中生17532688
19女第一17405310
20男高中生17386862
21女第一17319096
22男高中生17319096
23女性第一17300028
24男第一17282480
25女性优先17177771
26男第一17124681
27女第一17093906
28女第一17042011
29男高中生17042011
30女第一17042010
31男高中生17042010
32女第一17042006
33男高中生17042006
34女第一17042003
35女第一17042002
36男高中生17042002
37男第一17042001
38女第一17041999
39男高中生17041997
40女性优先17041995
41女第一17041994
42女第一17041993
43名女高中生17041993
44女第一17041992
45名女高中生17041992
46女第一17041991
47男第一17041990
48男高中生17041990
49男第一17041989
50男高中生17041989

这里有一个简洁的解决方案,由
pivot\u wide

库(dplyr)
图书馆(tidyr)
新DF%
分组依据(pmid)%>%
pivot\u wide(name\u from=作者,
价值观(来源=性别)
表(newdf$优先,newdf$优先)
#>         
#>男女
#>女3 5
#>男0 7
chisq.测试(表(新DF$优先,新DF$高级))
#>chisq.测试中的警告(表(newdf$First,newdf$Senior)):卡方检验
#>近似值可能不正确
#> 
#>皮尔逊卡方检验与耶茨连续性校正
#> 
#>数据:表格(newdf$First,newdf$Senior)
#>X平方=1.356,df=1,p值=0.2442
newdf%>%
过滤器(!is.na(第一)和!is.na(高级))
#>#tibble:15 x 3
#>#组:pmid[15]
#>pmid第一高级
#>           
#>1198958667男
#>2 18751818男
#>318751811男
#>418751810女
#>518088800男
#>617532688男
#>7 17319096女男
#>8 17042011女男
#>9 17042010女男
#>1017042006女男
#>1117042002女男
#>12 17041993女
#>1317041992女
#>1417041990男
#>1517041989男
表(newdf$优先,newdf$优先)
#>         
#>男女
#>女3 5
#>男0 7
chisq.测试(表(新DF$优先,新DF$高级))
#>chisq.测试中的警告(表(newdf$First,newdf$Senior)):卡方检验
#>近似值可能不正确
#> 
#>皮尔逊卡方检验与耶茨连续性校正
#> 
#>数据:表格(newdf$First,newdf$Senior)
#>X平方=1.356,df=1,p值=0.2442
你的数据


mydf高尔夫编码的整洁解决方案:

library(tidyr)
contig_table <- mydf %>% 
  spread(authorship, gender) %>% 
  #Only need drop_na() if data is incomplete
  #Given that you have a lot more rows I assume this will not be needed
  drop_na() %$% 
  table(First, Senior)
library(tidyr)
重叠表%
传播(作者、性别)%>%
#仅当数据不完整时才需要drop_na()
#考虑到您有更多的行,我认为不需要这样做
删除\u na()%$%
表(第一,高级)