如何在dplyr中使用整洁的数据进行列联表分析

亚历克斯

假设我有以下数据。

Table  is_exposed  disease   value
1           1        1         4
1           1        0         100
1           0        1         20
1           0        0         80
2           1        1         10
2           1        0         40
2           0        1         15
2           0        0         30

Table 代表具有以下格式的2x2表中的每个表。

                   Exposed    Not Exposed        
                 ---------- --------------
Disease             a          b
No Disease          c          d

我将如何在dplyr中进行以下计算?

  1. 风险a/(a+b)c/(c+d)[应该为上述数据的4个值]
  2. 风险差异risk2-risk1[根据上述数据应为2个值]
  3. 赔率ad/bc[根据上述数据应为2个值]

输出格式

Table  disease    risk
1         1       .167
1         0       .556
2         1       .2
2         0       .33

Table risk_diff odds_ratio
1        .389       .16
2        .13        .5
avid_useR
df %>%
  split(df$Table) %>%
  lapply(function(x){
    tab = xtabs(value ~ is_exposed + disease, data = x) %>%
      as.list() %>%
      setNames(c("d", "c", "b", "a")) %>%
      data.frame()
  }) %>%
  do.call(rbind, .) %>%
  mutate(Risk_d1 = a/(a+b),
         Risk_d0 = c/(c+d),
         Risk_diff = Risk_d1-Risk_d0,
         Odds_ratio = (a*d)/(b*c))

#    d   c  b  a   Risk_d1   Risk_d0  Risk_diff Odds_ratio
# 1 80 100 20  4 0.1666667 0.5555556 -0.3888889       0.16
# 2 30  40 15 10 0.4000000 0.5714286 -0.1714286       0.50

笔记:

xtabs创建一个is_exposed对照表disease并将其关联value到每个对应的单元格的交叉表

df %>%
  split(df$Table) %>%
  lapply(function(x){
    tab = xtabs(value ~ is_exposed + disease, data = x)
  })

# $`1`
#           disease
# is_exposed   0   1
#          0  80  20
#          1 100   4
# 
# $`2`
#           disease
# is_exposed  0  1
#          0 30 15
#          1 40 10

为了通过引用的每个小区abc,和d,我扁平每个表与as.list和使用setNames,从而分配适当的标签。lapply返回一个列表,因此do.call(rbind, .)将两个“行”组合在一起,并使其成为一个数据框:

df %>%
  split(df$Table) %>%
  lapply(function(x){
    tab = xtabs(value ~ is_exposed + disease, data = x) %>%
      as.list() %>%
      setNames(c("d", "c", "b", "a")) %>%
      data.frame()
  })

# $`1`
# d   c  b a
# 1 80 100 20 4
# 
# $`2`
# d  c  b  a
# 1 30 40 15 10

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在R中使用整洁的文本进行Bi-gram主题建模?

如何在数据帧中使用NA进行列乘法?

如何使用 dplyr 旋转复杂的整洁数据框

如何在R中使用dplyr按组进行汇总并获得总体数据集的摘要

如何在laravel中使用列排序进行列排序

如何在wordpress中使用css进行列堆叠

如何在Pandas中使用非数字数据进行数据透视表?

Laravel:如何在数据表中使用Ajax对数据进行排序?

R:我如何在 dplyr 中使用 mutate 进行分组?

如何在 dplyr 中使用 `sql function` 进行查询?

如何在SQL中使用两个表数据进行管理员登录?

如何在数据表中使用逗号分隔值进行自定义过滤?

如何在python pandas中使用数据透视表进行以下输入?

使用dplyr在R中的整洁数据框中进行多个值排名

包含丢失的数据时,如何在“ dplyr”中使用rowSums()?

如何在R中使用Dplyr过滤年初至今的数据?

dplyr:如何使用count()使列保持整洁

在数据表中使用column()。visible()进行列隐藏不起作用

如何使数据表更整洁?

如何在Java中使用哈希表进行搜索?

如何使用dplyr和整洁的评估以编程方式过滤数据帧?

如何在“整洁”数据框中的选定点上方对N行进行子集

如何在php中使用数组对数据进行排序?

如何在nodejs中使用nodemailer进行批量数据发送?

如何在 VueJS 中使用数据进行条件视图?

使用数据表在多个表中进行列搜索

如何在Goland IDE中使用分析

如何在Spring Batch中使用ClassifierCompositeItemProcessor并将数据写入同一表以进行插入和Upsert?

如何在Excel中使用数据透视表对单个单元格中的多个值进行计数?