【问题标题】:Running an analysis over each column of a data.table对 data.table 的每一列运行分析
【发布时间】:2015-01-20 19:19:21
【问题描述】:

我有一个非常大的数据表,其中包含一个响应变量,该变量可以为零(失败)或 1 成功。在 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)并单独存储结果表(可能在列表中)以供进一步参考?

非常感谢。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我会先融化数据:

    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
    

    您可能只需要一张表就到此为止,然后使用“表”列来选择要使用的“因素”。但是,如果您更喜欢将它们拆分为包含两个表的列表:

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

    【讨论】:

    • 只是想说声谢谢。我没有足够的声誉来投票。你的方法肯定比可能 eval(parse(paste 方法!不过我希望完全使用 data.table 范式,因为数据很大。另外我不确定如何创建 ggplot 对象列表(例如) 以这种方式处理数据。
    • @AlanChalk 没问题。 “data.table 范式”是什么意思? table.dt 将是一个 data.table 和 table.list 将是一个 data.tables 列表(就像你问的那样)所以我不确定你想使用 data.tables 有多少范式:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2016-06-13
    • 2020-12-14
    • 2018-09-18
    相关资源
    最近更新 更多