R共生矩阵水平数据

R新手.我正在尝试使用水平数据创建共生矩阵.我想知道哪些元素在行中共同出现’TRUE’.

每行代表一篇文章.每篇文章都有许多标记元素存在与否的真/假变量.这里有100个元素,缩写为10k以上.所以10,000 x 101数据帧.

 dat <- read.table(text='"article"     "element1"   "element2"   "element3"   "element4"
 1     "a house a home"     "TRUE"   "TRUE"   "FALSE"   "FALSE"
 2     "cabin in the woods"     "TRUE"   "TRUE" "FALSE" "FALSE"
 3     "motel is a hotel"   "TRUE"    "FALSE"   "TRUE"   "FALSE"', header=TRUE)

我尝试跟随这个共现问题(Creating co-occurrence matrix),但似乎由于数据的组织方式不同,这种方法不起作用.

如果100个元素x 100个元素,那么有用的将是矩阵.有人有建议吗?

最佳答案
您链接的问题中的The sparse matrix answer提供了一种快速,简便的方法.对您的数据结构(有些)更容易.

# Make a vector of all elements.
elems <- colnames(dat)[-1] 
# Make a sparse matrix
library(Matrix)
s <- Matrix(as.matrix(dat[elems]), sparse=TRUE, dimnames=list(dat$article,elems))
# calculate co-occurrences
(t(s) %*% s)
# 4 x 4 sparse Matrix of class "dgCMatrix"
#          element1 element2 element3 element4
# element1        3        2        1        .
# element2        2        2        .        .
# element3        1        .        1        .
# element4        .        .        .        .

# If you don't want the exact number, and you want a "dense" matrix
as.matrix((t(s) %*% s) >= 1)
#          element1 element2 element3 element4
# element1     TRUE     TRUE     TRUE    FALSE
# element2     TRUE     TRUE    FALSE    FALSE
# element3     TRUE    FALSE     TRUE    FALSE
# element4    FALSE    FALSE    FALSE    FALSE

转载注明原文:R共生矩阵水平数据 - 代码日志