在大型数据帧中查找移动子集内的最大值

时间:2018-06-07 13:17:50

标签: r for-loop max subset

我有一个大型数据帧(1000x1000),我想找到子集中的所有最大值。

mat = diag(10-abs(-10:10))  # test matrix

我试图在接下来的3个步骤中使用for循环,但它不起作用:

  1. 提取连续的3x3子集,
  2. 找到每个中的最大值,
  3. 然后将子集的所有值更改为0,将最大值更改为1.
  4. 代码

    for (x in (1+2):(nrow(mat)-2)){ 
        for (y in (1+2):(ncol(mat)-2)){
            subset = mat[x:(x+2), y:(y+2)]
            wm = which.max(subset)
            mat[row(subset)[wm], col(subset)[wm]] == 1
        }}
    

    欢迎任何建议/更正: - )

1 个答案:

答案 0 :(得分:1)

也许是这样的:

set.seed(123)
m<-matrix(rnorm(100),ncol=10)
m.max<- matrix(0, ncol=ncol(m), nrow=nrow(m))
for(i in 2:(nrow(m)-1)){
  for(j in 2:(ncol(m)-1)){
    subset<-m[(i-1):(i+1),(j-1):(j+1)]
    idx <-which(subset == max(subset), arr.ind = TRUE)
    m.max[(i+idx[1]-2),(j+idx[2]-2)]<-1
  }
}
m.max

请注意,每个步骤中不一定会产生新的“1”,因为两个重叠子集的最大值可以是相同的条目。