我有一个大致类似以下内容的数据表:
DT <- data.table(disease = c(0,0,1,1,1,1),
hospital = c(2,2,4,3,3,2))每一行对应一个入院的人。“医院”是医院的ID号,“疾病”是特定疾病的状态。1=sick,0=not病了。
我想要计算每家医院有多少病人,也要计算没有病人的医院,以及不在这个特定data.table中的医院,这样我就可以指定有多少医院应该在我的最终表格中。
通过使用:DT[disease==1, .N, keyby= hospital],我可以获得
hospital N
1: 2 2
2: 3 1
3: 4 1但如果f.ex。我希望医院的数量是5,我得到的data.table (它不一定是一个data.table,它也可以是一个矩阵)看起来像这样:
hospital N
1: 1 0
2: 2 2
2: 3 1
3: 4 1
5: 5 0最好是排序的。它也可以是N的向量,只要它统计的是零事件的医院(但然后它肯定必须排序)。
我有一个相当大的数据集(也有其他列),这是在循环中进行的,所以它必须相当快。
提前谢谢你。
发布于 2019-11-20 18:48:59
我认为这是一个错误,因为样本数据和预期输出似乎不匹配(请参阅上面的评论)。
除此之外,您还可以使用table
table(DT[, hospital := factor(hospital, 1:5)])[2, ]
#1 2 3 4 5
#0 1 2 1 0或者,您可能想要disease = 0和disease = 1计数之和?
colSums(table(DT[, hospital := factor(hospital, 1:5)]))
#1 2 3 4 5
#0 3 2 1 0在这两种情况下,返回的对象都是一个命名的int向量。
发布于 2019-11-20 18:50:56
DT[.(hospital = 1:5, disease = 1), on = .(hospital, disease), .N, by = .EACHI
][, .(hospital, N)]
hospital N
1: 1 0
2: 2 1
3: 3 2
4: 4 1
5: 5 0https://stackoverflow.com/questions/58952312
复制相似问题