我有一个大型数据帧(1000x1000),我想找到子集中的所有最大值。
mat = diag(10-abs(-10:10)) # test matrix
我试图在接下来的3个步骤中使用for
循环,但它不起作用:
代码
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
}}
欢迎任何建议/更正: - )
答案 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”,因为两个重叠子集的最大值可以是相同的条目。