【发布时间】:2015-12-27 13:22:58
【问题描述】:
我有一个包含列号的列表:
list = list(c(1,4,5),c(2,4,2))
matrix = matrix(rep(0,10),ncol=5)
> list
[[1]]
[1] 1 4 5
[[2]]
[1] 2 4 2
> matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
我想要实现的是:
> matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 1 1
[2,] 0 1 0 1 0
但是因为我的列表很大,我的矩阵也很大,所以我对循环不满意:
for (i in 1:length(list)) matrix[i,list[[i]]] = 1
【问题讨论】:
-
您的解决方案被证明很慢,或者您只是不喜欢它使用循环的事实?
-
另外,这样更好吗?
library(data.table) ; setDT(melt(list))[, table(L1, factor(value, levels = min(value) : max(value)))] -
另一个选项是
i1 <- as.matrix(transform(stack(setNames(list, seq_along(list))), ind= as.numeric(ind))[2:1]); matrix[i1] <- 1