这听起来像你正在寻找table
,但你应该确保两列具有相同的因子水平:
levs <- unique(unlist(dt, use.names = FALSE)) table(lapply(dt, factor, levs)) # Target # Source a b c d # a 0 0 0 2 # b 0 0 2 0 # c 0 2 0 0 # d 0 0 0 0
我不知道它是否会提供任何速度改进,但您也可以使用dcast
"data.table":
dcast(lapply(dt, factor, levs), Source ~ Target, drop = FALSE, value.var = "Target", fun.aggregate = length)
您也可以使用igraph
。因为您说过要处理大数据,igraph
所以它具有使用稀疏矩阵的优点:
library(igraph) g <- graph_from_data_frame(dt) as_adjacency_matrix(g) 4 x 4 sparse Matrix of class "dgCMatrix" a b c d a . . . 2 b . . 2 . c . 2 . . d . . . .