Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,有没有办法对矩阵的行和列重新排序以创建密集的角点?_R_Matrix - Fatal编程技术网

在R中,有没有办法对矩阵的行和列重新排序以创建密集的角点?

在R中,有没有办法对矩阵的行和列重新排序以创建密集的角点?,r,matrix,R,Matrix,我有一个大矩阵,它由1,2和缺失(编码为NA)值组成。矩阵有500000行乘10000列。大约有0.05%的1或2个值,其余值为NA 我想对矩阵的行和列重新排序,以便矩阵的左上角与矩阵的其余部分相比包含相对较多的1和2。换句话说,我想通过对矩阵行和列重新排序,创建一个相对数据丰富的矩阵子集 有没有一种在R中实现这一点的有效方法,也许是使用一个库?我也会对Python或Java的解决方案感兴趣,但我更喜欢用R来执行,因为它是我最熟悉的语言 我认为可能有一套优化程序,我可以使用,因为我的工作矩阵太大

我有一个大矩阵,它由1,2和缺失(编码为NA)值组成。矩阵有500000行乘10000列。大约有0.05%的1或2个值,其余值为NA

我想对矩阵的行和列重新排序,以便矩阵的左上角与矩阵的其余部分相比包含相对较多的1和2。换句话说,我想通过对矩阵行和列重新排序,创建一个相对数据丰富的矩阵子集

有没有一种在R中实现这一点的有效方法,也许是使用一个库?我也会对Python或Java的解决方案感兴趣,但我更喜欢用R来执行,因为它是我最熟悉的语言

我认为可能有一套优化程序,我可以使用,因为我的工作矩阵太大,无法用肉眼进行重组

我已还原了一组编辑,以便问题与当前答案保持一致。

类似的内容

Rgames> bar
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA   NA   NA   NA   NA
[2,]    1   NA   NA   NA    3
[3,]   NA   NA   NA   NA   NA
[4,]    2   NA   NA   NA    4
[5,]   NA   NA   NA   NA   NA

Rgames> rab<-bar[order(bar[,1]),]
Rgames> rab
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   NA   NA   NA    3
[2,]    2   NA   NA   NA    4
[3,]   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA
Rgames> rab[,order(rab[1,])]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3   NA   NA   NA
[2,]    2    4   NA   NA   NA
[3,]   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA
Rgames>bar
[,1] [,2] [,3] [,4] [,5]
[1,]NA-NA-NA
[2,]1Na3
[3,]NA-NA-NA
[4,]2Na-NA-4
[5,]NA-NA-NA
Rgames>rab-rab
[,1] [,2] [,3] [,4] [,5]
[1,]1Na3
[2,]2Na4
[3,]NA-NA-NA
[4,]NA-NA-NA
[5,]NA-NA-NA
Rgames>rab[,顺序(rab[1,])]
[,1] [,2] [,3] [,4] [,5]
[1,]13钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠
[2,]2 4 NA NA
[3,]NA-NA-NA
[4,]NA-NA-NA
[5,]NA-NA-NA
正如罗兰所指出的,编辑是在一个更为普遍的情况下进行的,而这种情况不会发生。现在,如果允许一个人“混淆”行和列,这就可以做到:

for(j in 1:nrow(mfoo)) mat[j,]<-mat[j,order(mat[j,])]

for(j in 1:ncol(mat)) mat[,j]<-mat[order(mat[,j]),j]
for(j in 1:nrow(mfoo))mat[j,]类似的东西

Rgames> bar
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA   NA   NA   NA   NA
[2,]    1   NA   NA   NA    3
[3,]   NA   NA   NA   NA   NA
[4,]    2   NA   NA   NA    4
[5,]   NA   NA   NA   NA   NA

Rgames> rab<-bar[order(bar[,1]),]
Rgames> rab
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   NA   NA   NA    3
[2,]    2   NA   NA   NA    4
[3,]   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA
Rgames> rab[,order(rab[1,])]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3   NA   NA   NA
[2,]    2    4   NA   NA   NA
[3,]   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA
Rgames>bar
[,1] [,2] [,3] [,4] [,5]
[1,]NA-NA-NA
[2,]1Na3
[3,]NA-NA-NA
[4,]2Na-NA-4
[5,]NA-NA-NA
Rgames>rab-rab
[,1] [,2] [,3] [,4] [,5]
[1,]1Na3
[2,]2Na4
[3,]NA-NA-NA
[4,]NA-NA-NA
[5,]NA-NA-NA
Rgames>rab[,顺序(rab[1,])]
[,1] [,2] [,3] [,4] [,5]
[1,]13钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠
[2,]2 4 NA NA
[3,]NA-NA-NA
[4,]NA-NA-NA
[5,]NA-NA-NA
正如罗兰所指出的,编辑是在一个更为普遍的情况下进行的,而这种情况不会发生。现在,如果允许一个人“混淆”行和列,这就可以做到:

for(j in 1:nrow(mfoo)) mat[j,]<-mat[j,order(mat[j,])]

for(j in 1:ncol(mat)) mat[,j]<-mat[order(mat[,j]),j]
像这样的(j在1:nrow(mfoo))mat[j,]

#some sparse data
set.seed(42)
p <- 0.0005
mat <- matrix(sample(c(1, 2, NA), 1e4, TRUE, c(p/2, p/2, 1-p)), ncol=50)

#order columns and rows by the number of NA values in them   
mat <- mat[order(rowSums(is.na(mat))), order(colSums(is.na(mat)))]

#only show columns and rows containing non-NA values
mat[rowSums(!is.na(mat)) > 0, colSums(!is.na(mat)) > 0]
#       [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]   NA   NA   NA   NA    2   NA
# [2,]   NA   NA   NA   NA   NA    2
# [3,]   NA   NA    2   NA   NA   NA
# [4,]   NA    1   NA   NA   NA   NA
# [5,]    1   NA   NA   NA   NA   NA
# [6,]   NA   NA   NA    2   NA   NA
#一些稀疏数据
种子(42)
像这样

#some sparse data
set.seed(42)
p <- 0.0005
mat <- matrix(sample(c(1, 2, NA), 1e4, TRUE, c(p/2, p/2, 1-p)), ncol=50)

#order columns and rows by the number of NA values in them   
mat <- mat[order(rowSums(is.na(mat))), order(colSums(is.na(mat)))]

#only show columns and rows containing non-NA values
mat[rowSums(!is.na(mat)) > 0, colSums(!is.na(mat)) > 0]
#       [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]   NA   NA   NA   NA    2   NA
# [2,]   NA   NA   NA   NA   NA    2
# [3,]   NA   NA    2   NA   NA   NA
# [4,]   NA    1   NA   NA   NA   NA
# [5,]    1   NA   NA   NA   NA   NA
# [6,]   NA   NA   NA    2   NA   NA
#一些稀疏数据
种子(42)

p也许我们两个应该把我们的答案合并成一个矩阵破碎机:-)谢谢你的回答。如果对行和列进行排序不能提供密集的角点,情况如何?我编辑了这个问题来回应这个评论。你为什么问我这个?任务是通过重新排序创建一个密集角。如果不可能,你必须说出你想做什么。@CarlWitthoft我不明白你的解决方案。(或者我应该说,我认为它不适用于一般情况。)我同意——我认为,没有其他加权函数,如果不允许行和列“混乱”,您的解决方案将尽可能实现最佳的重新排序就像我编辑的方法一样。也许我们两个应该把我们的答案合并成一个矩阵破碎机:-)谢谢你的回答。如果对行和列进行排序不能提供密集的角点,情况如何?我编辑了这个问题来回应这个评论。你为什么问我这个?任务是通过重新排序创建一个密集角。如果不可能,你必须说出你想做什么。@CarlWitthoft我不明白你的解决方案。(或者我应该说,我认为它不适用于一般情况。)我同意——我认为,没有其他加权函数,如果行和列不允许像我编辑的方法那样“混乱”,那么您的解决方案将尽可能实现最佳的重新排序。谢谢您的回答。如果对行和列进行排序不能提供密集的角点,情况如何?我编辑了这个问题来回应这个评论。谢谢你的回答。如果对行和列进行排序不能提供密集的角点,情况如何?我已经根据这个评论编辑了这个问题。在你的澄清(和一个良好的夜晚睡眠)中,我在考虑一个“密度”的测试,或者<代码>的比率是:数值/IS。每个行和列的NA < /代码>可以用来生成重新排序。那么,你认为什么是一个理想的重新排序?罗兰的回答是尽可能好的,除非你想让左上方的“权重”值大于远处的值。在你的澄清(以及一个良好的睡眠)之后,我想测试一下“密度”,或“<代码>的比率为.Navigy/Is.Na < /代码>可用于生成每一行和列。罗兰的回答是尽可能最好的,除非你想在左上方的“权重”值比那些远一点。