[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