我有一个矢量说查找在载体的最常见的元素中的R
c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)
如何找到每个元素的计数并返回3个最经常存在的元素,即,1,7,5?
我认为这应该很简单,但我遇到了麻烦。
我有一个矢量说查找在载体的最常见的元素中的R
c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)
如何找到每个元素的计数并返回3个最经常存在的元素,即,1,7,5?
我认为这应该很简单,但我遇到了麻烦。
我敢肯定,这是一个重复,但答案很简单:
sort(table(variable),decreasing=TRUE)[1:3]
如果你正在检查“NA”是否是最常用的值,则使用'table(variable,useNA =“ifany”)。否则'NA's会掉线! – alexpghayes
你可以使用表()函数来得到一个数组/矢量值的频率的列表,然后排序这张桌子。
x = c(1, 1, 1, 2, 2)
sort(table(x))
2 1
2 3
我不知道这是不是表的方式更好,但如果你的名单已经是一个因素则及其摘要方法会给你的频数:
> summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7)))
1 2 3 4 5 7
6 1 1 1 2 5
然后您就可以获得前3名最常见的,像这样:
> names(sort(summary(as.factor(c(1,1,1,1,1,1,2,3,4,5,7,7,5,7,7,7))), decreasing=T)[1:3])
[1] "1" "7" "5"
如果向量仅包含整数,tabulate
将多速度比 还要别的吗。有一对夫妇渔获物要注意的:
这意味着,如果您的x = c(1,1,1,3)
然后将返回(3, 0, 1)
。请注意,计数默认为1 to max(x)
。
如何使用tabulate
来确保您可以传递任何数字?
set.seed(45)
x <- sample(-5:5, 25, TRUE)
# [1] 1 -2 -3 -1 -2 -2 -3 1 -3 -5 -1 4 -2 0 -1 -1 5 -4 -1 -3 -4 -2 1 2 4
只需添加abs(min(x))+1
时min(x) <= 0
以确保该值从1开始。如果min(x) > 0
,那么就直接使用tabulate
。
sort(setNames(tabulate(x + ifelse(min(x) <= 0, abs(min(x))+1, 0)),
seq(min(x), max(x))), decreasing=TRUE)[1:3]
如果您的载体确实包含NA
,那么你可以使用table
与useNA="always"
参数。
你可以使用table()..参见http://stackoverflow.com/questions/1923273/counting-the-number-of-elements-with-the-values-of-x-in-a-vector – cobie