查找矩阵行(按列)大于矩阵或向量中指定的值

时间:2012-06-19 15:44:02

标签: r matrix

我有以下矩阵:

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

对于mp的每一列,我想在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 个答案:

答案 0 :(得分:1)

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

将p的第1行复制4次,使它们现在具有相同的大小并且>比较可以做到。

使用以下内容可以更加通用:

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

这样,p单行被复制为m行的次数。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

lapply(1:length(p), function(x) m[p[x] > m[,x],x])
[[1]]
[1] 1

[[2]]
[1] 5 6

[[3]]
[1]  9 10

答案 3 :(得分: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
>