我有一个数组:
myarray<-array(rep(1:5,3*99), dim=c(9,3,99))
和一个功能:
freq<-function(x){
m<-names(which(table(x) == max(table(x)))); m<-as.numeric(m)
if (length(m)>1){ m<-sample(m,1) } else m
}
我想查看数组中每个矩阵的第二列,即 myarray[,2,] 并确定该列中最常见的值。如果有 2 个或更多最常见的值,那么我想随机选择一个。为此,我编写了上述函数并将其应用于数组:
apply(myarray[,2,],2,freq)
这完美地工作,但执行时间有点慢。
我相信它很慢,因为该函数会生成一个表并转换数据结构。有没有更有效的方法?
在做了一点阅读之后,我发现 tabulate() 是获取向量中出现频率的最快方法。
我到目前为止:
f<-function(x){
a<-which.max(tabulate(x))
if (length(a)>1) {a<-sample(a,1)} else {a}
}
但该which.max
部分不起作用,因为它总是返回第一个值。一旦我得到了制表的结果,我怎样才能让它列出最常出现的数字?