交换数字,如果一个在矩阵R中比另一个更常见

时间:2013-09-04 21:42:54

标签: r

我有一个看起来像

的矩阵
0  0  0   0  1   2  NA 
0  0  0   0  0   0  0
2  1  2   0  1   0  2

假设我想重新编码,以便对于频率高于0的行,我将它们相互替换。然后,该行将所有2个替换为零,反之亦然。什么是快速简便的方法?

我最终会这样:(改变第三行)

0  0  0   0  1   2  NA 
0  0  0   0  0   0  0
0  1  0   2  1   2  0

2 个答案:

答案 0 :(得分:1)

便宜:

t(apply(m, 1, function(x) {
    x2 <- x==2
    x0 <- x==0
    if(sum(x2)>sum(x0)) {
        x[x2] <- 0
        x[x0] <- 2
    }
    x
}))

答案 1 :(得分:0)

另一次尝试:

#dat <- matrix(c(0,0,2,0,0,1,0,0,2,0,0,0,1,0,1,2,0,0,NA,0,2),ncol=7)
ind <- rowSums(dat==2,na.rm=TRUE) > rowSums(dat==0,na.rm=TRUE)
dat[ind,] <- as.numeric(chartr("02","20",dat[ind,]))

结果:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    0    0    0    0    1    2   NA
[2,]    0    0    0    0    0    0    0
[3,]    0    1    0    2    1    2    0