Python 同一组R中数的共现矩阵
数据帧中的每一行(我可以将其转换为数组)都表示组。 我想创建一个‘n x n’矩阵(n是数据中显示的最大数)。 这个矩阵将告诉我两个数字一起出现了多少组 例如,在第一组(第一行)中,5和9、5和23、5和32、5和33、9和23、9和32、9和33。。。。。等等一起出现了 在输出矩阵上,这看起来像是: (该矩阵只是一个示例,它不符合上述数据。) 就像我说的,每个数字表示两个数字一起出现的组数 我已经在谷歌上搜索了所有的地方,但仍然有困难。Python 同一组R中数的共现矩阵,python,arrays,r,dataframe,matrix,Python,Arrays,R,Dataframe,Matrix,数据帧中的每一行(我可以将其转换为数组)都表示组。 我想创建一个‘n x n’矩阵(n是数据中显示的最大数)。 这个矩阵将告诉我两个数字一起出现了多少组 例如,在第一组(第一行)中,5和9、5和23、5和32、5和33、9和23、9和32、9和33。。。。。等等一起出现了 在输出矩阵上,这看起来像是: (该矩阵只是一个示例,它不符合上述数据。) 就像我说的,每个数字表示两个数字一起出现的组数 我已经在谷歌上搜索了所有的地方,但仍然有困难。 请在这方面帮助我,,,(使用python或R)我不确定
请在这方面帮助我,,,(使用python或R)我不确定我是否完全理解您想要的输出。在下面的解决方案中,计算每行项目的二进制出现次数,然后将所有行项目的(二进制)共出现次数相加。这就是你要找的吗 代码可能编写得更优雅、更快速(例如,通过始终使用
data.table
),但至少这是一个开始
mat <- rbind(c(1,1,2,2), c(2,2,3,3), c(2,1,1,4))
# [,1] [,2] [,3] [,4]
# [1,] 1 1 2 2
# [2,] 2 2 3 3
# [3,] 2 1 1 4
mat_tab_row <- apply(mat, 1, function(x) {
items <- unique(x)
data.frame(matrix(t(rep(1, length(items)))
, nrow = 1
, dimnames = list(1, items)))
})
# [[1]]
# X1 X2
# 1 1 1
#
# [[2]]
# X2 X3
# 1 1 1
#
# [[3]]
# X2 X1 X4
# 1 1 1 1
library(data.table)
mat_tab <- as.matrix(rbindlist(mat_tab_row, fill = T))
mat_tab[ is.na(mat_tab)] <- 0
# X1 X2 X3 X4
# [1,] 1 1 0 0
# [2,] 0 1 1 0
# [3,] 1 1 0 1
t(mat_tab) %*% mat_tab
# X1 X2 X3 X4
# X1 2 2 0 1
# X2 2 3 1 1
# X3 0 1 1 0
# X4 1 1 0 1
mat在R中,可以试试
n <- 5
set.seed(1)
(m <- matrix(sample(seq_len(n*2), n*n, T), ncol = n))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 9 3 5 10
# [2,] 4 10 2 8 3
# [3,] 6 7 7 10 7
# [4,] 10 7 4 4 2
# [5,] 3 1 8 8 3
co <- tcrossprod(apply(m, 1, `%in%`, x=seq(1L, max(m))))
diag(co) <- 0L
co
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 0 0 1 0 0 0 0 1 0 0
# [2,] 0 0 1 2 0 0 1 1 0 2
# [3,] 1 1 0 1 1 0 0 2 1 2
# [4,] 0 2 1 0 0 0 1 1 0 2
# [5,] 0 0 1 0 0 0 0 0 1 1
# [6,] 0 0 0 0 0 0 1 0 0 1
# [7,] 0 1 0 1 0 1 0 0 0 2
# [8,] 1 1 2 1 0 0 0 0 0 1
# [9,] 0 0 1 0 1 0 0 0 0 1
#[10,] 0 2 2 2 1 1 2 1 1 0
n请将示例输入和输出数据作为可复制的代码共享,而不是作为两个完全不相关的数据图像共享。我很困惑。我不清楚。对不起,伙计们,我会用更清楚的解释和可指责的数据编辑这篇文章。