[R] Product of certain rows in a matrix
    arun 
    smartpink111 at yahoo.com
       
    Mon Sep  2 16:25:07 CEST 2013
    
    
  
Hi,
You could try:
A<- matrix(unlist(read.table(text="
1 2 3
4 5 6
7 8 9
9 8 7
6 5 4
3 2 1
",sep="",header=FALSE)),ncol=3,byrow=FALSE,dimnames=NULL)
library(matrixStats)
 res1<-t(sapply(split(as.data.frame(A),as.numeric(gl(nrow(A),2,6))),colProds))
 res1
#  [,1] [,2] [,3]
#1    4   10   18
#2   63   64   63
#3   18   10    4
 res2<-t(sapply(split(as.data.frame(A),((seq_len(nrow(A))-1)%/%2)+1),colProds)) 
 identical(res1,res2)
#[1] TRUE
#or
 t(sapply(split(as.data.frame(A),as.numeric(gl(nrow(A),2,6))),function(x) apply(x,2,prod)))
#or
library(plyr)
 as.matrix(ddply(as.data.frame(A),.(as.numeric(gl(nrow(A),2,6))),colProds)[,-1])
#     V1 V2 V3
#[1,]  4 10 18
#[2,] 63 64 63
#[3,] 18 10  4
#or
do.call(rbind,tapply(seq_len(nrow(A)),list(as.numeric(gl(nrow(A),2,6))),FUN=function(x) colProds(A[x,])))
#or
A1<- data.frame(A,ID=as.numeric(gl(nrow(At),2,6)))
 aggregate(A1[,-4],list(A1[,4]),colProds)[,-1]
#  X1 X2 X3
#1  4 10 18
#2 63 64 63
#3 18 10  4
#or
library(data.table)
At<- data.table(A1,key='ID')
subset(At[,lapply(.SD,colProds),by=ID],select=-1)
#   X1 X2 X3
#1:  4 10 18
#2: 63 64 63
#3: 18 10  4
A.K. 
Hello, 
I have this matrix : 
A = 
1 2 3 
4 5 6 
7 8 9 
9 8 7 
6 5 4 
3 2 1 
I would like to have this matrix (product of rows 2 by 2) : 
A = 
4 10 18 
63 64 63 
18 10 4 
Is it possible to do that without a loop ? 
Thank you in advance !
    
    
More information about the R-help
mailing list