我有一个看起来像
的矩阵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
答案 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