csmeredith
2012-Sep-12 20:45 UTC
[R] how to create a substraction matrix (subtract a row of every column from the same row in other columns)
Hello I have data like this x1 x2 x3 x4 x5 I want to create a matrix similar to a correlation matrix, but with the difference between the two values, like this x1 x2 x3 x4 x5 x1 x2-x1 x3-x1 x4-x1 x5-x1 x2 x3-x2 x4-x2 x5-x2 x3 x4-x3 x5-x3 x4 x5-x4 x5 Then I want to convert it back to a data frame with a column that describes what columns were used in the calculation, but I would like to only include the comparisons that go forward in number. Basically, each number represents a year, and I want each comparison to only be listed once, the difference between the 1st year the sample was taken and then 2nd year the sample was taken. (This would probably entail just taking a portion of the matrix.) . This is what the result would be difftype value x1x2 x1x3 x1x4 x1x5 x2x3 x2x4 x2x5 x3x4 x3x5 x4x5 Thank you for any help you can give me. -- View this message in context: http://r.789695.n4.nabble.com/how-to-create-a-substraction-matrix-subtract-a-row-of-every-column-from-the-same-row-in-other-column-tp4642949.html Sent from the R help mailing list archive at Nabble.com.
Rui Barradas
2012-Sep-13 09:04 UTC
[R] how to create a substraction matrix (subtract a row of every column from the same row in other columns)
Hello,
I'm not sure if this is what you want.
dat <- data.frame(matrix(1:25 + rnorm(25), ncol=5,
dimnames=list(NULL, paste0("x", 1:5))))
d2 <- apply(dat, 1, diff)
nms <- t(outer(names(dat), names(dat), paste0))
res <- data.frame(difftype = nms[lower.tri(nms)],
value = d2[lower.tri(d2, diag = TRUE)])
res
Hope this helps,
Rui Barradas
Em 12-09-2012 21:45, csmeredith escreveu:> Hello
> I have data like this
>
> x1 x2 x3 x4 x5
>
> I want to create a matrix similar to a correlation matrix, but with the
> difference between the two values, like this
>
> x1 x2 x3 x4 x5
> x1 x2-x1 x3-x1 x4-x1 x5-x1
> x2 x3-x2 x4-x2 x5-x2
> x3 x4-x3 x5-x3
> x4 x5-x4
> x5
>
> Then I want to convert it back to a data frame with a column that describes
> what columns were used in the calculation, but I would like to only include
> the comparisons that go forward in number. Basically, each number
represents
> a year, and I want each comparison to only be listed once, the difference
> between the 1st year the sample was taken and then 2nd year the sample was
> taken. (This would probably entail just taking a portion of the matrix.) .
> This is what the result would be
>
> difftype value
> x1x2
> x1x3
> x1x4
> x1x5
> x2x3
> x2x4
> x2x5
> x3x4
> x3x5
> x4x5
>
> Thank you for any help you can give me.
>
>
>
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/how-to-create-a-substraction-matrix-subtract-a-row-of-every-column-from-the-same-row-in-other-column-tp4642949.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org 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.
Ben Bolker
2012-Sep-13 12:20 UTC
[R] how to create a substraction matrix (subtract a row of every column from the same row in other columns)
csmeredith <csmeredith <at> fs.fed.us> writes:>[snip]> I want to create a matrix similar to a correlation matrix, but with the > difference between the two values, like this > > x1 x2 x3 x4 x5 > x1 x2-x1 x3-x1 x4-x1 x5-x1 > x2 x3-x2 x4-x2 x5-x2 > x3 x4-x3 x5-x3 > x4 x5-x4 > x5 > > Then I want to convert it back to a data frame with a column that describes > what columns were used in the calculation, but I would like to only include > the comparisons that go forward in number. Basically, each number represents > a year, and I want each comparison to only be listed once, the difference > between the 1st year the sample was taken and then 2nd year the sample was > taken. (This would probably entail just taking a portion of the matrix.) .[snip] You might want to start with (something like) library(reshape2); subset(melt(outer(x,x,"-")), Var1>Var2) and then remove redundant rows ... I haven't actually tested any of that, but it should get you started.
arun
2012-Sep-13 18:14 UTC
[R] how to create a substraction matrix (subtract a row of every column from the same row in other columns)
Hi,
Try this:
vec1<-1:5
library(MCMCpack)
?cbind(rep(0,4),xpnd(diff(combn(vec1,2)),4))
##???? [,1] [,2] [,3] [,4] [,5]
#[1,]??? 0??? 1??? 2??? 3??? 4
#[2,]??? 0??? 2??? 1??? 2??? 3
#[3,]??? 0??? 3??? 2??? 1??? 2
#[4,]??? 0??? 4??? 3??? 2??? 1
dat1<-data.frame(difftype=
paste0("x",combn(vec1,2,paste,collapse="x")),value=as.vector(diff(combn(vec1,2))))
?head(dat1)
#? difftype value
#1???? x1x2???? 1
#2???? x1x3???? 2
#3???? x1x4???? 3
#4???? x1x5???? 4
#5???? x2x3???? 1
#6???? x2x4???? 2
A.K.
----- Original Message -----
From: csmeredith <csmeredith at fs.fed.us>
To: r-help at r-project.org
Cc:
Sent: Wednesday, September 12, 2012 4:45 PM
Subject: [R] how to create a substraction matrix (subtract a row of every column
from the same row in other columns)
Hello
I have data like this
x1? x2? x3? x4? x5
I want to create a matrix similar to a correlation matrix, but with the
difference between the two values, like this
x1? x2? ? ? ? x3? ? ? ? x4? ? ? ? ? x5
x1? x2-x1? ? x3-x1? ? x4-x1? ? x5-x1
x2? ? ? ? ? ? ? x3-x2? ? x4-x2? ? x5-x2
x3? ? ? ? ? ? ? ? ? ? ? ? ? x4-x3? ? ? x5-x3
x4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x5-x4
x5
Then I want to convert it back to a data frame with a column that describes
what columns were used in the calculation, but I would like to only include
the comparisons that go forward in number. Basically, each number represents
a year, and I want each comparison to only be listed once, the difference
between the 1st year the sample was taken and then 2nd year the sample was
taken. (This would probably entail just taking a portion of the matrix.) .
This is what the result would be
difftype value
x1x2? ? ?
x1x3
x1x4
x1x5
x2x3
x2x4
x2x5
x3x4
x3x5
x4x5
Thank you for any help you can give me.
--
View this message in context:
http://r.789695.n4.nabble.com/how-to-create-a-substraction-matrix-subtract-a-row-of-every-column-from-the-same-row-in-other-column-tp4642949.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
R-help at r-project.org 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.