r - Counting the number of elements with the values of x in a vector

ID : 5352

viewed : 127

Tags : rvectorcountr-faqr





Top 5 Answer for r - Counting the number of elements with the values of x in a vector

vote vote

92

You can just use 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  

Then you can subset it:

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

Or convert it into a data.frame if you're more comfortable working with that:

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

87

The most direct way is sum(numbers == x).

numbers == x creates a logical vector which is TRUE at every location that x occurs, and when suming, the logical vector is coerced to numeric which converts TRUE to 1 and FALSE to 0.

However, note that for floating point numbers it's better to use something like: sum(abs(numbers - x) < 1e-6).

vote vote

70

I would probably do something like this

length(which(numbers==x)) 

But really, a better way is

table(numbers) 
vote vote

66

There is also count(numbers) from plyr package. Much more convenient than table in my opinion.

vote vote

54

My preferred solution uses rle, which will return a value (the label, x in your example) and a length, which represents how many times that value appeared in sequence.

By combining rle with sort, you have an extremely fast way to count the number of times any value appeared. This can be helpful with more complex problems.

Example:

> 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 ... 

If the value you want doesn't show up, or you need to store that value for later, make a 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 

I find it is rare that I want to know the frequency of one value and not all of the values, and rle seems to be the quickest way to get count and store them all.

Top 3 video Explaining r - Counting the number of elements with the values of x in a vector







Related QUESTION?