我有 3 个训练集,有 5 个不同的事件:
list(c('e1','e3','e4'),c('e2','e4'),c('e1','e3','e5'))
我不知道我的列表中有多少事件。所以我也需要计算它们。这里我以 e1 到 e5 事件为例。可能有 m 个事件,我还需要找到 m 个。怎么找米?一般来说,如何在 R 中创建m×n 二进制矩阵,其中 m 事件总数,n 个训练集?事件 ID 可能是随机的,不一定是 'eN' 类型,如 'MX050331'、'IIF02002' 等。
# per the OP's second edit
# now assumes there are no events that haven't been observed at least once
tr <- list(c('e1','e3','e4'),c('e2','e4'),c('e1','e3','e5'))
e <- unique(unlist(tr))
sapply(tr, function(x) e %in% x)
也许是这样的:
x <- list(c('e1','e3','e4'),
c('e2','e4'),
c('e1','e3','e5'))
t(sapply(x, function(y) {
table(factor(y, levels = c("e1", "e2", "e3", "e4", "e5")))
}))
# e1 e2 e3 e4 e5
# [1,] 1 0 1 1 0
# [2,] 0 1 0 1 0
# [3,] 1 0 1 0 1
显然,t
如果你不想转置它,你可以放弃它。
如果事件的数量和名称未知,可以修改函数如下:
t(sapply(x, function(y) {
myLevs <- unique(unlist(x))
table(factor(y, levels = myLevs[order(myLevs)]))
}))