[R] Is there a quick way to count the number of times each element in a vector appears?

Benilton Carvalho bcarvalh at jhsph.edu
Tue Mar 6 08:00:02 CET 2007


is this what you mean?

tmp <- combinations(3, 3, rep=TRUE)
colSums(apply(tmp, 1, duplicated))+1

b

On Mar 6, 2007, at 1:16 AM, Dylan Arena wrote:

> Hi there,
>
>
> I'm writing a function that calculates the probability of different
> outcomes of dice rolls (e.g., the sum of the highest three rolls of
> five six-sided dice).  I'm using the "combinations" function from the
> "gtools" package, which is great: it gives me a matrix with all of the
> possible combinations (with repetitions allowed).  Now I want to count
> the number of times each element appears in each arrangement so I can
> calculate the number of permutations of that arrangement.  E.g., if I
> get output like:
>
>> combinations(3,3, rep=TRUE)
>       [,1] [,2] [,3]
>  [1,]    1    1    1
>  [2,]    1    1    2
>  [3,]    1    1    3
>  [4,]    1    2    2
>  [5,]    1    2    3
>  [6,]    1    3    3
>  [7,]    2    2    2
>  [8,]    2    2    3
>  [9,]    2    3    3
> [10,]    3    3    3
>
> I'd like to be able to determine that the first row has 3 repetitions,
> yielding 3!/3! = 1 permutation, while the second row has 3
> repetitions, yielding 3!/2! = 3 permutations, etc.  (This gets harder
> when there are large numbers of dice with many faces.)
>
> I know there are simple things to do, like iterating over the rows
> with for loops, but I've heard that for loops are sub-optimal in R,
> and I'd like to see what an elegant solution would look like.
>
> E.g., I might like to use sapply() with whatever function I come up
> with; I thought of using something like duplicated() and just counting
> the number of TRUEs that are returned for each vector (since the
> elements are always returned in non-decreasing order), but I'm
> optimistic that there is a better (faster/cleaner) way.
>
> So here is my question in a nutshell:
> Does anyone have ideas for how I might efficiently process a matrix
> like that returned by a call to combinations(n, r, rep=TRUE) to
> determine the number of repetitions of each element in each row of the
> matrix?  If so, I'd love to hear them!
>
>
> Thanks very much for your time,
> Dylan Arena
> (Statistics M.S. student)
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting- 
> guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list