Does this work? Probably not the fastest, but I think it does the job.

foo<-function(x){
  temp=x[x>0]
  if(length(temp)>=3) sum(temp[1:3])
  else sum(temp)

set.seed(2)
mat<-matrix(sample(0:4, 25, replace=T, prob=c(1/2,rep(1/8,4)), ncol=5)
mat

#     [,1] [,2] [,3] [,4] [,5]
#[1,]    0    1    2    4    3
#[2,]    3    0    0    1    0
#[3,]    2    4    4    0    4
#[4,]    0    0    0    0    0
#[5,]    1    2    0    0    0


apply(mat, 1, foo)    #Apply the function to each row of the matrix
#[1]  7  4 10  0  3



On Tue, May 21, 2013 at 2:16 AM, José Verhoeven <j...@memo2.nl> wrote:

> 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@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.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to