我有以下矩陣。
r1 <- c("M","A","T","D","T","Y")
r2 <- c("M","A","G","G","D", "J")
r3 <- c("M","B","H","G","T", "Y")
r4 <- c("M","B","G","G","X", "Y")
r5<- c("F","A","H","D","T", "Y")
n.mat <- rbind(r1,r2,r3,r4,r5)
n.mat<-as.data.frame(n.mat)
我想用最頻繁的值(對于每一列)替換只有兩個值的列中的值。并保留具有兩個以上唯一值的列。
輸出:
r1 <- c("M","A","T","G","T","Y")
r2 <- c("M","A","G","G","D", "Y")
r3 <- c("M","A","H","G","T", "Y")
r4 <- c("M","A","G","G","X", "Y")
r5<- c("M","A","H","G","T", "Y")
n.mat <- rbind(r1,r2,r3,r4,r5)
n.mat<-as.data.frame(n.mat)
uj5u.com熱心網友回復:
我們可以使用Mode函式的條件檢查length的unique在IE中列元素if的數量unique元素大于2,回傳列,否則得到Mode
n.mat[] <- lapply(n.mat, function(x) if(length(unique(x)) > 2) x else Mode(x))
在哪里
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
-輸出
> n.mat
V1 V2 V3 V4 V5 V6
r1 M A T G T Y
r2 M A G G D Y
r3 M A H G T Y
r4 M A G G X Y
r5 M A H G T Y
如果我們需要 amatrix作為輸出,請as.matrix在上面的輸出上使用
n.mat <- as.matrix(n.mat)
或者使用apply代替lapply
apply(n.mat, 2, FUN = function(x) if(length(unique(x)) > 2) x
else rep(Mode(x), length(x)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352281.html
標籤:r
