在R中的矢量中,如果我有数据喜欢:
1 1 2 1 1 3 3 1 1
在这种情况下,1
占多数。
当然,我可以遍历列表并手动计算,但是在R中有更好的方法来查找向量中的主要值吗?
答案 0 :(得分:6)
您可以使用table
x <- c(1,1,2,1,1,3,3,1,1)
which.max(table(x))
# 1
# 1
也许,这样的事情会更有帮助。
names(which.max(table(x)))
# "1"
另一种选择是使用count
包
plyr
函数
library(plyr)
df <- count(x)
df[which.max(df$freq),1]
# [1] 1
答案 1 :(得分:2)
我们可以试试
as.numeric(names(which.max(table(x))))
示例:
x <- c(5,5,2,5,5,3,3,5,5)
#> as.numeric(names(which.max(table(x))))
#[1] 5
说明:
which.max(table(x))
的结果是一个命名整数,在本例中是
#> which.max(table(x))
#5
#3
此处值为3,名称为&#34; 5&#34;。此输出提供的信息是,最常用的条目是向量中包含的第三个唯一编号,按升序计算(此处有序编号为:2,3和5),并且它具有&#34;名称&#34; 5。在由数字组成的向量的情况下,这个数字的命名可能看起来很奇怪,但是向量也可以包含单词,例如&#34; red&#34;,&#34; blue&#34;,&#34;绿色&#34;,然后知道最常用单词的名称肯定会有用。
我们只对名称感兴趣,我们可以使用函数names()
来提取名称。结果是一个字符,在我们的例子中可以使用as.numeric()
强制转换为整数。
答案 2 :(得分:1)
我们可以使用table
Rcpp
功能
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
std::map<double, int> tableC(NumericVector x) {
std::map<double, int> counts;
int n = x.size();
for (int i = 0; i < n; i++) {
counts[x[i]]++;
}
return counts;
}
然后,我们source
文件,
library(Rcpp)
sourceCpp('Table.cpp')
x <- c(1,1,2,1,1,3,3,1,1)
tableC(x)
#1 2 3
#6 1 2
which.max(tableC(x))
#1
#1