【发布时间】:2016-04-27 20:21:22
【问题描述】:
我有这样的数据:
dat <- data.frame(
music = c("classical", "jazz", "baroque", "electronic", "ambient"),
john = c(1,1,0,1,1),
jeff = c(1,0,0,1,0),
jane = c(0,1,1,0,0)
)
music john jeff jane
1 classical 1 1 0
2 jazz 1 0 1
3 baroque 0 0 1
4 electronic 1 1 0
5 ambient 1 0 0
并且想要绘制列上个人之间的重叠 - 他们多久在同一行中都有 1?如果我能得到这个data.frame:
result <- data.frame(person1 = c("john", "john", "jeff"), person2 = c("jeff", "jane", "jane"), overlap = c(2, 1, 0))
person1 person2 overlap
1 john jeff 2
2 john jane 1
3 jeff jane 0
我可以创建我想要的图表:
library(igraph)
g <- graph.data.frame(result, directed = FALSE)
plot(g, edge.width = result$overlap * 3)
但我正在努力转换数据以计算每对列之间的逐行重叠。我该怎么做?
【问题讨论】:
-
尝试使用
m <- crossprod(as.matrix(dat[-1]),然后使用graph_from_adjacency_matrix(根据您的结果,您可能需要将对角线设置为零 diag(m) -
@user20650 这是一个完美的答案;我认为你应该把它正式化。