我有一个对称矩阵和一个适用于行和列的特定分组。我试图根据这个特定的分组只求这些行和列。R - 基于分组的总和矩阵行和列
例如,我有一个4 x 4矩阵。我也有一个特定的分组,如1,1,2,2。也就是说,行和列1和2属于组1,而行3和列4属于组2.我想应用函数rowSums或rowsum保持真正的组约束:
我的矩阵:
[,1] [,2] [,3] [,4]
[1,] 0 1 0 0
[2,] 1 0 1 0
[3,] 0 1 0 3
[4,] 3 0 0 0
直观地帮助我的问题,分组1,1,2,2基本上具有以下含义:
[,1] [,2] [,3] [,4]
[1,] 0 1 NA NA
[2,] 1 0 NA NA
[3,] NA NA 0 3
[4,] NA NA 0 0
应用rowSums原来的矩阵将产生:
[1] 1 2 4 3
另外,施加rowsum,它允许一组的通过,只适用分组的行和仍然求和不属于组的一部分的列:
[,1] [,2] [,3] [,4]
1 1 1 1 0
2 3 1 0 3
其原因,这是一个问题是因为我试图在每个组中找到最小值。由于上述内容包含不属于该组的部分,因此结果将不正确。我可以通过分组循环繁琐和应用rowSums获得每组的款项,然后找到最低:
rowSums(mat[c(1,2),c(1,2)])
[1] 1 1 <- minimum is 1
rowSums(mat[c(3,4),c(3,4)])
[1] 3 0 <- minimum is 0
不过,我有一个大矩阵,这种方法是不实际的。我很确定有一个更高效和简单的方法来做到这一点,但我似乎无法找到一个。理想情况下,我想的输出是这样的:
1 1 2 2 <- grouping
1 1 3 0
甚至
[,1] [,2] [,3] [,4]
1 1 1 Inf Inf
2 Inf Inf 3 0
任何建议,将不胜感激。
谢谢。
编辑:
我调整我的问题如下。由于我原来的矩阵:
[,1] [,2] [,3] [,4]
[1,] 0 1 0 0
[2,] 1 0 1 0
[3,] 0 1 0 3
[4,] 3 0 0 0
和具体分组:
groups<-c(1,1,2,2)
我可以通过组循环达到所需的输出:
groups<-c(1,1,2,2)
for(i in 1:length(groups))
{
mat[i,which(groups[i]!=groups)]<-NA
}
mat
[,1] [,2] [,3] [,4]
[1,] 0 1 NA NA
[2,] 1 0 NA NA
[3,] NA NA 0 3
[4,] NA NA 0 0
我怎样才能做到这一点,而不使用低效循环?
循环在
list
得到rowSums
你是怎么得到的'3 '在'1 1 3 0'中,如果你取最小值 – akrun我相信他想要mat [1:2,1:2]和mat [3:4,3:4]的最大值。分组c(1,1,2,2)适用于行和列。 – Haboryme
在这一步中,我只想显示每个组的行数(在搜索每个组的最小值之前)。 – hsn