计算向量中x的元素个数

血红的双手。 提交于 2020-02-26 10:17:39

我有一个数字向量:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
         453,435,324,34,456,56,567,65,34,435)

如何让R计算向量中值x出现的次数?


#1楼

R中有一个标准功能

tabulate(numbers)


#2楼

我的首选解决方案使用rle ,它将返回一个值(标签,示例中为x )和一个长度,该长度表示该值按顺序出现了多少次。

通过将rlesort结合使用,您可以非常快速地计算出任何值出现的次数。 这对于更复杂的问题可能会有帮助。

例:

> numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
> a <- rle(sort(numbers))
> a
  Run Length Encoding
    lengths: int [1:15] 2 1 2 2 1 1 2 1 2 1 ...
    values : num [1:15] 4 5 23 34 43 54 56 65 67 324 ...

如果你想要的值显示不出来,或者你需要存储供以后该值,使a一个data.frame

> b <- data.frame(number=a$values, n=a$lengths)
> b
    values n
 1       4 2
 2       5 1
 3      23 2
 4      34 2
 5      43 1
 6      54 1
 7      56 2
 8      65 1
 9      67 2
 10    324 1
 11    435 3
 12    453 1
 13    456 1
 14    567 1
 15    657 1

我发现很少想知道一个值而不是所有值的频率,而rle似乎是获取计数和存储所有值的最快方法。


#3楼

还有plyr包中的count(numbers) 。 我认为这比table方便得多。


#4楼

您可以只使用table()

> a <- table(numbers)
> a
numbers
  4   5  23  34  43  54  56  65  67 324 435 453 456 567 657 
  2   1   2   2   1   1   2   1   2   1   3   1   1   1   1 

然后,您可以将其子集化:

> a[names(a)==435]
435 
  3

或将其转换为data.frame(如果您更喜欢这样做):

> as.data.frame(table(numbers))
   numbers Freq
1        4    2
2        5    1
3       23    2
4       34    2
...

#5楼

这是一种快速而肮脏的方法:

x <- 23
length(subset(numbers, numbers==x))
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!