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