[R] Sum first 3 non zero elements of row

arun smartpink111 at yahoo.com
Tue May 21 15:38:19 CEST 2013


Hi,
You could try:
set.seed(24)
 mat1<- matrix(sample(0:5,10*20,replace=TRUE),ncol=20)
mat2<- mat1
mat2[2,1:19]<-0
sapply(split(mat2,row(mat2)),function(x) sum(x[x!=0][1:3],na.rm=TRUE))
# 1  2  3  4  5  6  7  8  9 10 
# 5  2 12  8  5 14  6 10 10  8 
mat3<- mat2
mat3[2,]<- 0
sapply(split(mat3,row(mat3)),function(x) sum(x[x!=0][1:3],na.rm=TRUE))
# 1  2  3  4  5  6  7  8  9 10 
# 5  0 12  8  5 14  6 10 10  8 
A.K.




----- Original Message -----
From: José Verhoeven <jose at memo2.nl>
To: r-help at r-project.org
Cc: 
Sent: Tuesday, May 21, 2013 5:16 AM
Subject: [R] Sum first 3 non zero elements of row

Hi there,
I've got this matrix D with, say 10 rows and 20 columns. For each row I want
to sum the first 3 non zero elements and put them in a vector z.

So if the first row D[1,] is
0 3 5 0 8 9 3 2 4 0

then I want z
z<-D[1,2]+D[1,3]+D[1,5]

But if there are less than 3 non zero elements, those should be summed. If
there are no non zero elements, the result must be zero.

So if the first row D[1,] is
0 0 3 0 1 0 0 0 0 0

then I want z
z<-D[1,3]+D[1,5]

Hope someone can help me out!

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