[R] Sums based on values of other matrix
arun
smartpink111 at yahoo.com
Fri Sep 27 01:23:03 CEST 2013
Just to add:
If you had missing values in both matrices, then some values in B matrix that are NA's could also replace the values in A that are 1.
So, it is better to use:
rowSums(B1,na.rm=TRUE)
A.K.
----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: tobias schlager <tobebryant at me.com>
Cc: R help <r-help at r-project.org>
Sent: Thursday, September 26, 2013 7:15 PM
Subject: Re: [R] Sums based on values of other matrix
Hi,
If you have missing values:
set.seed(125)
A<- matrix(sample(c(NA,0:9),10*10,replace=TRUE),10,10)
set.seed(49)
B<- matrix(sample(c(NA,1:25),10*10,replace=TRUE),10,10)
B1<- matrix(0,nrow=nrow(B),ncol=ncol(B))
B1[A==1 & !is.na(A)]<- B[A==1 & !is.na(A)]
rowSums(B1)
#[1] 0 0 38 7 16 0 0 1 6 18
#Speed comparison
set.seed(485)
Anew<- matrix(sample(c(NA,0:9),3e5*70,replace=TRUE),3e5,70)
set.seed(944)
Bnew<- matrix(sample(c(NA,1:25),3e5*70,replace=TRUE),3e5,70)
B2<- Bnew
B3<- matrix(0,nrow=nrow(Bnew),ncol=ncol(Bnew))
system.time({
B3[Anew==1 & !is.na(Anew)]<- Bnew[Anew==1 & !is.na(Anew)]
res1<- rowSums(B3)
})
# user system elapsed
# 2.916 0.308 3.232
system.time({
vec1<-ifelse(Anew == 1 & !is.na(Anew), B2, 0)
res2<- rowSums(vec1)
})
# user system elapsed
# 7.012 0.744 7.775
identical(res1,res2)
#[1] TRUE
A.K.
Dear Sarah,
this works very well! If fulfills what I need, however, there is
a small performance problem: I have 300.000 rows and 70 columns. With
missing values.
Besides that you directly hit the key.
Thanks,
Tobias
----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: tobias schlager <tobebryant at me.com>
Cc: R help <r-help at r-project.org>
Sent: Thursday, September 26, 2013 6:34 PM
Subject: Re: [R] Sums based on values of other matrix
Hi,
Try:
A<- structure(c(1, 2, 1, 2, 2, 1, 2, 1), .Dim = c(2L, 4L))
B<- structure(c(3, 1, 4, 1, 2, 2, 1, 2), .Dim = c(2L, 4L))
B1<- matrix(0,nrow(B),ncol(B))
B1[A==1]<-B[A==1]
rowSums(B1)
#[1] 7 4
A.K.
----- Original Message -----
From: tobias schlager <tobebryant at me.com>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc:
Sent: Thursday, September 26, 2013 5:51 PM
Subject: [R] Sums based on values of other matrix
Dear all,
I have a big problem:
- I got two matrices, A and B
- A shows identifies the value of B, however the values of B must be summed
- For instance,
1 1 2 2
2 2 1 1
gives matrix a
3 4 2 1
1 1 2 2
gives matrix b
Now the result for the value 1 would be
7
4
which are the rowsums of the values of matrix B given that matrix A has the value 1.
How can I do this automatically? I am really puzzled here. Thanks for your help guys,
Tobi
[[alternative HTML version deleted]]
______________________________________________
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.
More information about the R-help
mailing list