2

我有以下矩阵:

m = matrix(c(1:12), nrow=4)
p = matrix(c(2,7,11), nrow=1)

m对于and的每一列p,我想找到列中m的值小于列中的值p

p = 1 6 11 

m = 1 5 9
    2 6 10
    3 7 11
    4 8 12

这样我就可以得到这样的东西:

ans = m[,] > p[,]

ans = 
    F F F
    T F F
    T T F
    T T T

(或类似的东西)

我已经尝试过m[,] > p[,] 并且也设置p为向量,但都不起作用。

4

4 回答 4

1
m > p[rep(1, 4,),]

将 p 的第 1 行复制 4 次,以便它们现在大小相同,并且可以进行 > 比较。

可以使用以下方法使其更通用:

m > p[rep(1, nrow(m),),]

这样,p 单行复制的次数与 m 行一样多。

于 2012-06-19T15:49:36.707 回答
1

mapply(function(x,y) x > max(y), as.data.frame(m), as.data.frame(p))

于 2012-06-19T15:53:29.857 回答
0
lapply(1:length(p), function(x) m[p[x] > m[,x],x])
[[1]]
[1] 1

[[2]]
[1] 5 6

[[3]]
[1]  9 10
于 2012-06-19T15:50:23.053 回答
0

您还可以apply对每一行进行相等性测试m

> t(apply(m, 1, function(x) x > p))
      [,1]  [,2]  [,3]
[1,] FALSE FALSE FALSE
[2,] FALSE FALSE FALSE
[3,]  TRUE FALSE FALSE
[4,]  TRUE  TRUE  TRUE
> 

如果我使用你的第二个,我会得到你的答案p

p <- c(1, 6, 11)

> t(apply(m, 1, function(x) x > p))
      [,1]  [,2]  [,3]
[1,] FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE
[3,]  TRUE  TRUE FALSE
[4,]  TRUE  TRUE  TRUE
> 
于 2012-06-19T15:53:57.020 回答