[R] Measure the frequencies of pairs in a matrix

2015-10-06 Thread Hermann Norpois
Hello,

I have a matrix mat (see dput(mat))

> mat
  [,1] [,2]
 [1,]56
 [2,]65
 [3,]54
 [4,]55
 

 I want the frequencies of the pairs in a new matrix, whereas the
combination 5 and 6 is the same as 6 and 5 (see the first two rows of mat).
In other words: What is the probability of each combination (each row)
ignoring the order in the combination. As a result I would like to have a
matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not appear
in my matrix.

 dput (mat)
structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))

Thanks
Hermann

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


Re: [R] Measure the frequencies of pairs in a matrix

2015-10-06 Thread Boris Steipe
Since order is not important to you, you can order your pairs (e.g. decreasing) 
before compiling the frequencies.
But I don't understand the second part about values "that do not appear in the 
matrix". Do you mean you want to assess all combinations? If that's the case I 
would think about a hash table or other indexed data structure, rather than 
iterating through a matrix.


B.



On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:

> Hello,
> 
> I have a matrix mat (see dput(mat))
> 
>> mat
>  [,1] [,2]
> [1,]56
> [2,]65
> [3,]54
> [4,]55
> 
> 
> I want the frequencies of the pairs in a new matrix, whereas the
> combination 5 and 6 is the same as 6 and 5 (see the first two rows of mat).
> In other words: What is the probability of each combination (each row)
> ignoring the order in the combination. As a result I would like to have a
> matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not appear
> in my matrix.
> 
> dput (mat)
> structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> 
> Thanks
> Hermann
> 
>   [[alternative HTML version deleted]]
> 
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


Re: [R] Measure the frequencies of pairs in a matrix

2015-10-07 Thread Boris Steipe
Still not sure I understand. But here is what I think you might mean:

# Your data
mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))

# Create a square matrix with enough space to have an element for each pair. 
Since
# order is not important, only the upper triangle is used. If the matrix is
# large and sparse, a different approach might be needed.
freq <- matrix(numeric(max(mat) * max(mat)),  nrow = max(mat), ncol = max(mat))

# Loop over your input
for (i in 1:nrow(mat)) {
# Sort the elements of a row by size.
x <- sort(mat[i,])
# Increment the corresponding element of the frequency matrix
freq[x[1], x[2]] <- freq[x[1], x[2]] + 1
}

freq


Cheers,
B.
 




On Oct 7, 2015, at 1:17 AM, Hermann Norpois  wrote:

> Ok, this was misleading. And was not that important. My result matrix should 
> look like this: 
> 
>   12   3   4   5   6   7 ...
> 1 p1 p2
> 2 p
> 3
> 4
> 
> p1 etc are the frequencies of the combinations
> 
> 1 and 2 for instance do not appear in my example. So the values would be 
> zero. Actually, this part is not too important. I would be happy enough to 
> solve the challenge with the frequencies of the pairs.
> Thanks Hermann
> 
> 2015-10-07 2:40 GMT+02:00 Boris Steipe :
> Since order is not important to you, you can order your pairs (e.g. 
> decreasing) before compiling the frequencies.
> But I don't understand the second part about values "that do not appear in 
> the matrix". Do you mean you want to assess all combinations? If that's the 
> case I would think about a hash table or other indexed data structure, rather 
> than iterating through a matrix.
> 
> 
> B.
> 
> 
> 
> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
> 
> > Hello,
> >
> > I have a matrix mat (see dput(mat))
> >
> >> mat
> >  [,1] [,2]
> > [1,]56
> > [2,]65
> > [3,]54
> > [4,]55
> > 
> >
> > I want the frequencies of the pairs in a new matrix, whereas the
> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of mat).
> > In other words: What is the probability of each combination (each row)
> > ignoring the order in the combination. As a result I would like to have a
> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not appear
> > in my matrix.
> >
> > dput (mat)
> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >
> > Thanks
> > Hermann
> >
> >   [[alternative HTML version deleted]]
> >
> > __
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
> 
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
> 

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


Re: [R] Measure the frequencies of pairs in a matrix

2015-10-07 Thread David L Carlson
As with Boris, I'm not sure what you are looking for, but this may help

> # To get all possibilities, create a grid
> grd <- expand.grid(0:9, 0:9)
> # Extract those with smaller first column values
> grd <- grd[grd$Var1 <= grd$Var2,]
> # Tabulate after pasting first and second column
> grd2 <- data.frame(table(apply(grd, 1, paste0, collapse=" - ")))
> 
> # Combine the two tables and subtract 1 to get rid of the counts from 
> grd2$Freq
> dta2 <- rbind(grd2, dta)
> freqs <- data.frame(xtabs(Freq~Var1, dta2) - 1)
> str(freqs)
'data.frame':   55 obs. of  2 variables:
 $ Var1: Factor w/ 55 levels "0 - 0","0 - 1",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Freq: num  0 0 0 0 0 0 0 0 0 0 ...
> freqs[c(40:50), ]
Var1 Freq
40 4 - 90
41 5 - 52
42 5 - 6   10
43 5 - 74
44 5 - 80
45 5 - 90
46 6 - 60
47 6 - 72
48 6 - 80
49 6 - 90
50 7 - 70

-
David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77840-4352

-Original Message-
From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Boris Steipe
Sent: Wednesday, October 7, 2015 8:10 AM
To: Hermann Norpois
Cc: r-help
Subject: Re: [R] Measure the frequencies of pairs in a matrix

Still not sure I understand. But here is what I think you might mean:

# Your data
mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))

# Create a square matrix with enough space to have an element for each pair. 
Since
# order is not important, only the upper triangle is used. If the matrix is
# large and sparse, a different approach might be needed.
freq <- matrix(numeric(max(mat) * max(mat)),  nrow = max(mat), ncol = max(mat))

# Loop over your input
for (i in 1:nrow(mat)) {
# Sort the elements of a row by size.
x <- sort(mat[i,])
# Increment the corresponding element of the frequency matrix
freq[x[1], x[2]] <- freq[x[1], x[2]] + 1
}

freq


Cheers,
B.





On Oct 7, 2015, at 1:17 AM, Hermann Norpois  wrote:

> Ok, this was misleading. And was not that important. My result matrix should 
> look like this: 
> 
>   12   3   4   5   6   7 ...
> 1 p1 p2
> 2 p
> 3
> 4
> 
> p1 etc are the frequencies of the combinations
> 
> 1 and 2 for instance do not appear in my example. So the values would be 
> zero. Actually, this part is not too important. I would be happy enough to 
> solve the challenge with the frequencies of the pairs.
> Thanks Hermann
> 
> 2015-10-07 2:40 GMT+02:00 Boris Steipe :
> Since order is not important to you, you can order your pairs (e.g. 
> decreasing) before compiling the frequencies.
> But I don't understand the second part about values "that do not appear in 
> the matrix". Do you mean you want to assess all combinations? If that's the 
> case I would think about a hash table or other indexed data structure, rather 
> than iterating through a matrix.
> 
> 
> B.
> 
> 
> 
> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
> 
> > Hello,
> >
> > I have a matrix mat (see dput(mat))
> >
> >> mat
> >  [,1] [,2]
> > [1,]56
> > [2,]65
> > [3,]54
> > [4,]55
> > 
> >
> > I want the frequencies of the pairs in a new matrix, whereas the
> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of mat).
> > In other words: What is the probability of each combination (each row)
> > ignoring the order in the combination. As a result I would like to have a
> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not appear
> > in my matrix.
> >
> > dput (mat)
> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >
> > Thanks
> > Hermann
> >
> >   [[alternative HTML version deleted]]
> >
> > __
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
> 
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and 

Re: [R] Measure the frequencies of pairs in a matrix

2015-10-07 Thread William Dunlap
You could also call table() on the columns of the input matrix, first
converting them
to factors with levels 1:max.  Then add together the upper and lower
triangles of
the table if order is not important.  E.g.,
f2 <- function (mat)
{
maxMat <- max(mat)
stopifnot(is.matrix(mat), all(mat %in% seq_len(maxMat)))
L <- split(factor(mat, levels = seq_len(maxMat)), col(mat))
Table <- do.call(table, unname(L))
ignoreOrder <- function(M) {
stopifnot(length(dim(M)) == 2)
lower <- lower.tri(M, diag = FALSE)
upper <- upper.tri(M, diag = FALSE)
M[lower] <- M[lower] + t(M)[lower]
M[upper] <- t(M)[upper]
M
}
ignoreOrder(Table)
}

> mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> f2(mat)

 1  2  3  4  5  6  7
  1  0  0  0  0  0  0  0
  2  0  0  0  0  0  0  0
  3  0  0  0  2  0  0  2
  4  0  0  2  0  4  0  0
  5  0  0  0  4  2 10  4
  6  0  0  0  0 10  0  2
  7  0  0  2  0  4  2  0
Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Wed, Oct 7, 2015 at 6:09 AM, Boris Steipe  wrote:
> Still not sure I understand. But here is what I think you might mean:
>
> # Your data
> mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
>
> # Create a square matrix with enough space to have an element for each pair. 
> Since
> # order is not important, only the upper triangle is used. If the matrix is
> # large and sparse, a different approach might be needed.
> freq <- matrix(numeric(max(mat) * max(mat)),  nrow = max(mat), ncol = 
> max(mat))
>
> # Loop over your input
> for (i in 1:nrow(mat)) {
> # Sort the elements of a row by size.
> x <- sort(mat[i,])
> # Increment the corresponding element of the frequency matrix
> freq[x[1], x[2]] <- freq[x[1], x[2]] + 1
> }
>
> freq
>
>
> Cheers,
> B.
>
>
>
>
>
> On Oct 7, 2015, at 1:17 AM, Hermann Norpois  wrote:
>
>> Ok, this was misleading. And was not that important. My result matrix should 
>> look like this:
>>
>>   12   3   4   5   6   7 ...
>> 1 p1 p2
>> 2 p
>> 3
>> 4
>>
>> p1 etc are the frequencies of the combinations
>>
>> 1 and 2 for instance do not appear in my example. So the values would be 
>> zero. Actually, this part is not too important. I would be happy enough to 
>> solve the challenge with the frequencies of the pairs.
>> Thanks Hermann
>>
>> 2015-10-07 2:40 GMT+02:00 Boris Steipe :
>> Since order is not important to you, you can order your pairs (e.g. 
>> decreasing) before compiling the frequencies.
>> But I don't understand the second part about values "that do not appear in 
>> the matrix". Do you mean you want to assess all combinations? If that's the 
>> case I would think about a hash table or other indexed data structure, 
>> rather than iterating through a matrix.
>>
>>
>> B.
>>
>>
>>
>> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
>>
>> > Hello,
>> >
>> > I have a matrix mat (see dput(mat))
>> >
>> >> mat
>> >  [,1] [,2]
>> > [1,]56
>> > [2,]65
>> > [3,]54
>> > [4,]55
>> > 
>> >
>> > I want the frequencies of the pairs in a new matrix, whereas the
>> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of mat).
>> > In other words: What is the probability of each combination (each row)
>> > ignoring the order in the combination. As a result I would like to have a
>> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not appear
>> > in my matrix.
>> >
>> > dput (mat)
>> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
>> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
>> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
>> >
>> > Thanks
>> > Hermann
>> >
>> >   [[alternative HTML version deleted]]
>> >
>> > __
>> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> > 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.
>>
>> __
>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>>
>
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

Re: [R] Measure the frequencies of pairs in a matrix

2015-10-07 Thread Hermann Norpois
Ok, this was misleading. And was not that important. My result matrix
should look like this:

  12   3   4   5   6   7 ...
1 p1 p2
2 p
3
4

p1 etc are the frequencies of the combinations

1 and 2 for instance do not appear in my example. So the values would be
zero. Actually, this part is not too important. I would be happy enough to
solve the challenge with the frequencies of the pairs.
Thanks Hermann

2015-10-07 2:40 GMT+02:00 Boris Steipe :

> Since order is not important to you, you can order your pairs (e.g.
> decreasing) before compiling the frequencies.
> But I don't understand the second part about values "that do not appear in
> the matrix". Do you mean you want to assess all combinations? If that's the
> case I would think about a hash table or other indexed data structure,
> rather than iterating through a matrix.
>
>
> B.
>
>
>
> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
>
> > Hello,
> >
> > I have a matrix mat (see dput(mat))
> >
> >> mat
> >  [,1] [,2]
> > [1,]56
> > [2,]65
> > [3,]54
> > [4,]55
> > 
> >
> > I want the frequencies of the pairs in a new matrix, whereas the
> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of
> mat).
> > In other words: What is the probability of each combination (each row)
> > ignoring the order in the combination. As a result I would like to have a
> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not
> appear
> > in my matrix.
> >
> > dput (mat)
> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >
> > Thanks
> > Hermann
> >
> >   [[alternative HTML version deleted]]
> >
> > __
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
>
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


Re: [R] Measure the frequencies of pairs in a matrix

2015-10-08 Thread David L Carlson
More like this?

> mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
+ 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
+ 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> 
> # Convert columns in mat so first column is always smaller
> mat2 <- data.frame(t(apply(mat, 1, range)))
> mat2$X1 <- factor(mat2$X1, 1:9)
> mat2$X2 <- factor(mat2$X2, 1:9)
> tbl <- xtabs(~X1+X2, mat2)
> tbl.p <- tbl/sum(tbl)
> round(tbl.p, 2)
   X2
X1 123456789
  1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  3 0.00 0.00 0.00 0.08 0.00 0.00 0.08 0.00 0.00
  4 0.00 0.00 0.00 0.00 0.15 0.00 0.00 0.00 0.00
  5 0.00 0.00 0.00 0.00 0.08 0.38 0.15 0.00 0.00
  6 0.00 0.00 0.00 0.00 0.00 0.00 0.08 0.00 0.00
  7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

This puts everything on the diagonal and upper triangle. To get the lower 
triangle just use

> tbl <- xtabs(~X2+X1, mat2)

-
David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77840-4352



-Original Message-
From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Hermann Norpois
Sent: Wednesday, October 7, 2015 12:17 AM
To: Boris Steipe; r-help
Subject: Re: [R] Measure the frequencies of pairs in a matrix

Ok, this was misleading. And was not that important. My result matrix
should look like this:

  12   3   4   5   6   7 ...
1 p1 p2
2 p
3
4

p1 etc are the frequencies of the combinations

1 and 2 for instance do not appear in my example. So the values would be
zero. Actually, this part is not too important. I would be happy enough to
solve the challenge with the frequencies of the pairs.
Thanks Hermann

2015-10-07 2:40 GMT+02:00 Boris Steipe :

> Since order is not important to you, you can order your pairs (e.g.
> decreasing) before compiling the frequencies.
> But I don't understand the second part about values "that do not appear in
> the matrix". Do you mean you want to assess all combinations? If that's the
> case I would think about a hash table or other indexed data structure,
> rather than iterating through a matrix.
>
>
> B.
>
>
>
> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
>
> > Hello,
> >
> > I have a matrix mat (see dput(mat))
> >
> >> mat
> >  [,1] [,2]
> > [1,]56
> > [2,]65
> > [3,]54
> > [4,]55
> > 
> >
> > I want the frequencies of the pairs in a new matrix, whereas the
> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of
> mat).
> > In other words: What is the probability of each combination (each row)
> > ignoring the order in the combination. As a result I would like to have a
> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not
> appear
> > in my matrix.
> >
> > dput (mat)
> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >
> > Thanks
> > Hermann
> >
> >   [[alternative HTML version deleted]]
> >
> > __
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
>
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


Re: [R] Measure the frequencies of pairs in a matrix

2015-10-08 Thread Hermann Norpois
Thanks a lot. This was very helpful. I want to apologise for being
unprecise. My favourite solution was William's.
Thanks again.

2015-10-07 18:39 GMT+02:00 William Dunlap :

> You could also call table() on the columns of the input matrix, first
> converting them
> to factors with levels 1:max.  Then add together the upper and lower
> triangles of
> the table if order is not important.  E.g.,
> f2 <- function (mat)
> {
> maxMat <- max(mat)
> stopifnot(is.matrix(mat), all(mat %in% seq_len(maxMat)))
> L <- split(factor(mat, levels = seq_len(maxMat)), col(mat))
> Table <- do.call(table, unname(L))
> ignoreOrder <- function(M) {
> stopifnot(length(dim(M)) == 2)
> lower <- lower.tri(M, diag = FALSE)
> upper <- upper.tri(M, diag = FALSE)
> M[lower] <- M[lower] + t(M)[lower]
> M[upper] <- t(M)[upper]
> M
> }
> ignoreOrder(Table)
> }
>
> > mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> > f2(mat)
>
>  1  2  3  4  5  6  7
>   1  0  0  0  0  0  0  0
>   2  0  0  0  0  0  0  0
>   3  0  0  0  2  0  0  2
>   4  0  0  2  0  4  0  0
>   5  0  0  0  4  2 10  4
>   6  0  0  0  0 10  0  2
>   7  0  0  2  0  4  2  0
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
>
> On Wed, Oct 7, 2015 at 6:09 AM, Boris Steipe 
> wrote:
> > Still not sure I understand. But here is what I think you might mean:
> >
> > # Your data
> > mat <- structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >
> > # Create a square matrix with enough space to have an element for each
> pair. Since
> > # order is not important, only the upper triangle is used. If the matrix
> is
> > # large and sparse, a different approach might be needed.
> > freq <- matrix(numeric(max(mat) * max(mat)),  nrow = max(mat), ncol =
> max(mat))
> >
> > # Loop over your input
> > for (i in 1:nrow(mat)) {
> > # Sort the elements of a row by size.
> > x <- sort(mat[i,])
> > # Increment the corresponding element of the frequency matrix
> > freq[x[1], x[2]] <- freq[x[1], x[2]] + 1
> > }
> >
> > freq
> >
> >
> > Cheers,
> > B.
> >
> >
> >
> >
> >
> > On Oct 7, 2015, at 1:17 AM, Hermann Norpois  wrote:
> >
> >> Ok, this was misleading. And was not that important. My result matrix
> should look like this:
> >>
> >>   12   3   4   5   6   7 ...
> >> 1 p1 p2
> >> 2 p
> >> 3
> >> 4
> >>
> >> p1 etc are the frequencies of the combinations
> >>
> >> 1 and 2 for instance do not appear in my example. So the values would
> be zero. Actually, this part is not too important. I would be happy enough
> to solve the challenge with the frequencies of the pairs.
> >> Thanks Hermann
> >>
> >> 2015-10-07 2:40 GMT+02:00 Boris Steipe :
> >> Since order is not important to you, you can order your pairs (e.g.
> decreasing) before compiling the frequencies.
> >> But I don't understand the second part about values "that do not appear
> in the matrix". Do you mean you want to assess all combinations? If that's
> the case I would think about a hash table or other indexed data structure,
> rather than iterating through a matrix.
> >>
> >>
> >> B.
> >>
> >>
> >>
> >> On Oct 6, 2015, at 4:59 PM, Hermann Norpois  wrote:
> >>
> >> > Hello,
> >> >
> >> > I have a matrix mat (see dput(mat))
> >> >
> >> >> mat
> >> >  [,1] [,2]
> >> > [1,]56
> >> > [2,]65
> >> > [3,]54
> >> > [4,]55
> >> > 
> >> >
> >> > I want the frequencies of the pairs in a new matrix, whereas the
> >> > combination 5 and 6 is the same as 6 and 5 (see the first two rows of
> mat).
> >> > In other words: What is the probability of each combination (each row)
> >> > ignoring the order in the combination. As a result I would like to
> have a
> >> > matrix that includes rows and cols 0, 1, 2 ... max (mat) that do not
> appear
> >> > in my matrix.
> >> >
> >> > dput (mat)
> >> > structure(c(5, 6, 5, 5, 4, 3, 6, 7, 4, 7, 5, 5, 5, 5, 6, 5, 5,
> >> > 4, 3, 6, 7, 4, 7, 5, 5, 5, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7,
> >> > 6, 6, 5, 4, 5, 5, 7, 5, 6, 3, 5, 6, 7, 6), .Dim = c(26L, 2L))
> >> >
> >> > Thanks
> >> > Hermann
> >> >
> >> >   [[alternative HTML version deleted]]
> >> >
> >> > __
> >> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> > 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.
> >>
> >> __
> >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting gui