【问题标题】:generate all possible contingency tables from two dataframes r从两个数据帧 r 生成所有可能的列联表
【发布时间】:2017-11-27 21:37:02
【问题描述】:

今天脑子里放了个屁,我希望这是我想念的一个明显的解决办法。我有两个数据框,一个是端点数据框,另一个是风险因素数据框。我将计算所有可能的风险因素组合与所有可能结果的所有风险比率。我需要一个从两个数据帧生成所有可能的列联表的函数。如果能有一个成名的作品允许我输入一些统计函数作为列联表函数的一部分。

示例数据:

a = c(1,0,1,1,1)
b = c(0,1,1,0,0)
c = c(1,1,0,0,1)
d = c(0,0,0,1,1)

risk = data.frame(a,b)
endpoint = data.frame(c,d)

同样,如果您可以将其拼凑成一个循环,让我在创建列联表时计算统计数据,我将不胜感激。它允许我将现有代码复制/粘贴到函数中。

谢谢

【问题讨论】:

  • 您要计算哪些“统计数据”?在提供的两个数据框riskendpoint 的上下文中,您如何获得风险因素的组合。对不起,这个问题根本不清楚。您能否提供示例数据的预期结果。
  • 这很简单,我的数据包含大约 100 个我们认为是风险因素的元素。大约有 20 个端点。我想知道 100 个风险因素中的任何一个以及任何端点是否增加了关联(如风险比)。我基本上想制作一堆 2x2 表。我会在问题中澄清

标签: r dataframe


【解决方案1】:

尚不清楚您要创建什么“列联表”,但以下为您提供riskendpoint 的所有组合的table 输出:

lapply(data.frame(t(expand.grid(names(risk), names(endpoint), 
                                stringsAsFactors = FALSE)), stringsAsFactors = FALSE), 
       function(x) table(risk[[x[1]]], endpoint[[x[2]]], dnn = x))

请注意,有两个stringsAsFactors=FALSE,一个用于expand.grid,另一个用于data.frame,因为这两个函数都将字符隐式转换为因子,这对于table 来说是不可取的。为了简化上面的代码,你可以使用tidyverse等价物:

map(as.tibble(t(expand.grid(names(risk), names(endpoint), 
                            stringsAsFactors = FALSE))), 
    ~ table(risk[[.[1]]], endpoint[[.[2]]], dnn = .))

结果:

$X1
   c
a   0 1
  0 0 1
  1 2 2

$X2
   c
b   0 1
  0 1 2
  1 1 1

$X3
   d
a   0 1
  0 1 0
  1 2 2

$X4
   d
b   0 1
  0 1 2
  1 2 0

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多