3

我有 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' 等。

4

2 回答 2

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)
于 2013-07-10T11:28:25.920 回答
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)]))
}))
于 2013-07-10T11:31:27.570 回答