对data.table的每一列运行分析

时间:2015-01-20 19:19:21

标签: r data.table

我有一个非常大的数据表,它包含一个响应变量,它可以是零(失败)或一次成功。在data.table中有很多列,每一列代表响应率可能变化的因素。我想对将产生各种内容的每列数据进行相同的分析,例如该列的响应率表,直方图等。

我想要制作的表格示例如下所示:

data.dt <- data.table(response=round(runif(100,0,1),0), 
                      factor1 = sample(LETTERS,100, replace=TRUE),
                      factor2 = sample(letters,100, replace=TRUE)
                     )
setkey(data.dt, factor1)
table.dt <- data.dt[,list(patients=.N,
                          successes=sum(response)
                         ), 
                     by=list(factor1)
                    ]
table.dt[,successesRate  := round(successes/patients,2)] 
table.dt

暂时坚持使用表格,如何在data.table的每一列上运行此表(在本例中为factor1和factor2)并将结果表单独存储(可能在列表中)以供进一步参考?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我会首先融化数据:

library(reshape2)

data.dt.melt <- melt(data.dt, id.vars="response",
    variable.name="table", value.name="factor")

table.dt <- data.dt.melt[,list(patients=.N, 
    successes=sum(response)), 
    by=list(table, factor)]

      table factor patients successes
 1: factor1      A        4         3
 2: factor1      B        3         0
 3: factor1      C        3         2
 4: factor1      D        2         1
 5: factor1      E        7         3
 6: factor1      F        4         1
 ...
47: factor2      x        2         0
48: factor2      i        3         0
49: factor2      t        2         1
50: factor2      e        4         1
51: factor2      a        2         1
52: factor2      k        3         2

你可能只用一张桌就停在那里并使用&#34;表&#34;列选择&#34;因子&#34;你想要合作。但是如果你更喜欢将它们分成两个表的列表:

table.list <- list(factor1=table.dt[table=="factor1"],!"table",with=F],
    factor2=table.dt[table=="factor2"][,!"table",with=F])