我有3个训练集有5个不同的事件:
list(c('e1','e3','e4'),c('e2','e4'),c('e1','e3','e5'))
我不知道我的列表中会有多少事件。所以我也需要数他们。这里我以e1到e5事件为例。我可以在m个事件中找到m。如何找到m? 一般来说,如何在R中创建 m-by-n二进制矩阵,其中m-total事件数,n-training训练集? 事件ID可能是随机的,不一定是'eN'类型,如'MX050331','IIF02002'等。
答案 0 :(得分:5)
# 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)
答案 1 :(得分:3)
也许是这样的:
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)]))
}))