取出R中最常出现的矩阵行的元素?

时间:2017-07-20 22:57:09

标签: r function matrix

在Base R中,是否可以 取出(即只返回值) 最常出现的元素在以下矩阵中排?

更新: @ d.b看到您的解决方案似乎从下面的矩阵CI.test中选择了错误的对。 CI可以从您的解决方案中选择,CI.test是用于从中挑选最常行的元素的矩阵:

N = 60 ; df = N-1 ; d = 3

f <- function (ncp, alpha, q, df) {
  abs(suppressWarnings(pt(q = d*sqrt(N), df = df, ncp, lower.tail = FALSE)) - alpha)
  }

  a = mapply(c, as.list(20:30), as.list(-20:-30), SIMPLIFY = FALSE) # a list of paired values

 CI.test <- matrix(NA, length(a), 2)

 for(i in 1:length(a)){

CI.test[i,] = sapply(c(0.025, 0.975),
 function(x) optimize(f, interval = a[[i]], alpha = x, q = d*sqrt(N), df = df, tol = 1e-10)[[1]])

   }  

CI = CI.test[which.max(ave(1:nrow(CI.test), do.call(paste, data.frame(CI.test)), FUN = seq_along)), ]


  list(CI, CI.test)

1 个答案:

答案 0 :(得分:2)

使用ave计算对的出现次数并提取出现次数最多的次数

m = matrix(c(-5.904236,  7.547438, 3.386315,  7.547438, -7.420706,
                                  7.547438, 3.386315,  7.547438), 4, 2)
m[which.max(ave(1:NROW(m), do.call(paste, data.frame(m)), FUN = seq_along)),]
#[1] 7.547438 7.547438

您可能需要舍入值

CI.test[which.max(ave(1:NROW(CI.test), do.call(paste, round(data.frame(CI.test), 3)),
                                                                        FUN = seq_along)),]
#[1] 18.59838 27.83543