我有一个数字向量:
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
)和一个长度,该长度表示该值按顺序出现了多少次。
通过将rle
与sort
结合使用,您可以非常快速地计算出任何值出现的次数。 这对于更复杂的问题可能会有帮助。
例:
> 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))
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3166159