我有这个数组:
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
[25] 1 1 1 1 2 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1
[49] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[73] 1 1 1 1 1 4 3 2 5 3 2 3 3 2 3 2 3 2 3 3 2 3 3 2
[97] 3 2 2 2 3 2 2 2 2 2 3 2 3 3 2 3 2 1 2 2 3 2 2 3
我需要一个只返回最大出现次数的函数。例如,如果我使用:
table(x[1:80])
我会得到:
1 2 3 4
74 3 2 1
如何自动获取价值' 74'?这意味着我无法知道' 1'或者' 2'等等...是我的数组中出现的最大值。谢谢!
编辑:
我跑:
tf<- tablulate(x):
[1] 75 24 19 1 1
并尝试运行for
循环以获得&#34;最大值&#34; &#34;表格结果&#34;如下:
for (element in tf)
{
+ b= max(table(x[element]))
+ print (b)
+ }
我没有得到预期的结果,这可能很简单但不适合我。 我试过这个:
> a=max(table(C[1:75]))
[1] 72
> b=max(table(C[76:99]))
[1] 11
> c=max(table(C[100:118]))
[1] 12
> d=max(table(C[119]))
[1] 1
> e=max(table(C[120]))
[1] 1
等等。 它有效,但如果我有一个大数据集,它真的很长而且没有趣。
答案 0 :(得分:4)
对于评论者的提示,如果您想要使用功能:
maximum <- function(vector, upto=length(vector)) {
max(table(vector[1:upto]))
}
所以:
set.seed(123)
x <- sample(1:3, 100, replace=T)
maximum(x)
[1] 34
maximum(x, 55) #checking at the 55th number in the vector
[1] 19
回答您编辑过的问题。使用此功能:
maxtable <- function(vector) {
index <- cumsum(1:length(vector) %in% cumsum(tabulate(vector)))
s <- split(vector, index)
sapply(s, function(v) max(table(v)))
}
maxtable(x)
0 1 2 3 4 5
71 11 12 1 1 1
我认为这个小改变更多的是你正在寻找的东西:
maxtable2 <- function(vector) {
index <- cumsum(1:length(vector) %in% (cumsum(tabulate(vector))+1))
s <- split(vector, index+1)
sapply(s, function(v) max(table(v)))
}
maxtable2(x)
1 2 3 4 5
72 11 12 1 1
答案 1 :(得分:0)
库modeest
中有一个函数可以帮助您完成调用mfv
的大部分工作。但功能本身很简单,可以让自己:
> mfv
function (x, ...)
{
f <- factor(x)
tf <- tabulate(f)
return(as.numeric(levels(f)[tf == max(tf)]))
}
<environment: namespace:modeest>
所以你可以sum(x == mfv(x))
得到74。