r - Multiply each observation by every other observation in another dataframe -




i have 3 sets of data. each observation in column multiply every observation in corresponding column in other datasets. example below explain; actual data has 200 rows. @ possible? need use loop? scale @ point more include more data sets.

    data set 1         [a] [b] [c]      [1]  a1  b1  c1     [2]  a2  b2  c2     [3]  a3  b3  c3      data set 2         [l] [m] [n]      [1]  l1  m1  n1     [2]  l2  m2  n2     [3]  l3  m3  n3      data set 3         [x] [y] [z]      [1]  x1  y1  z1     [2]  x2  y2  z2     [3]  x3  y3  z3      output               [,1]       [,2]       [,3]     [1,]  a1*l1*x1   b1*m1*y1   c1*n1*z1     [2,]  a1*l1*x2        ...        ...     [3,]  a1*l1*x3        ...        ...     [4,]  a1*l2*x1        ...        ...     [5,]  a1*l2*x2        ...        ...     [6,]  a1*l2*x3        ...        ...     [7,]  a1*l3*x1        ...        ...     [8,]  a1*l3*x2        ...        ...     [9,]  a1*l3*x3        ...        ...     [...]     [27,] a3*l3*x3        ...        ... 

does following match want?

a <- data.frame(matrix(1:6, ncol = 2) b <- matrix(1:6, ncol = 2) c <- matrix(1:6, ncol = 2)  out <- data.frame(mapply(kronecker, a, b)) out2 <- mapply(kronecker, out, c) out2       x1  x2  [1,]  1  64  [2,]  2  80  [3,]  3  96  [4,]  2  80  [5,]  4 100  [6,]  6 120  [7,]  3  96  [8,]  6 120  [9,]  9 144 [10,]  2  80 [11,]  4 100 [12,]  6 120 [13,]  4 100 [14,]  8 125 [15,] 12 150 [16,]  6 120 [17,] 12 150 [18,] 18 180 [19,]  3  96 [20,]  6 120 [21,]  9 144 [22,]  6 120 [23,] 12 150 [24,] 18 180 [25,]  9 144 [26,] 18 180 [27,] 27 216 

and generalize it, use instance:

hlpfun <- function(one, two) {   data.frame(mapply(kronecker, one, two)) }  reduce(hlpfun,list(a,b,c)) 

(credit goes @wen's comment)

here test case using @ape's matrices, converted matrices data.frames , supplied fun = paste kroneker (don't if want multiply numerical values):

hlpfun <- function(one, two) {   data.frame(mapply(kronecker, one, two, moreargs = list(fun = paste))) } reduce(hlpfun,list(data.frame(mat1),data.frame(mat2),data.frame(mat3)))          x1       x2       x3 1  a1 l1 x1 b1 m1 y1 c1 n1 z1 2  a1 l1 x2 b1 m1 y2 c1 n1 z2 3  a1 l1 x3 b1 m1 y3 c1 n1 z3 4  a1 l2 x1 b1 m2 y1 c1 n2 z1 5  a1 l2 x2 b1 m2 y2 c1 n2 z2 6  a1 l2 x3 b1 m2 y3 c1 n2 z3 7  a1 l3 x1 b1 m3 y1 c1 n3 z1 8  a1 l3 x2 b1 m3 y2 c1 n3 z2 9  a1 l3 x3 b1 m3 y3 c1 n3 z3 10 a2 l1 x1 b2 m1 y1 c2 n1 z1 11 a2 l1 x2 b2 m1 y2 c2 n1 z2 12 a2 l1 x3 b2 m1 y3 c2 n1 z3 13 a2 l2 x1 b2 m2 y1 c2 n2 z1 14 a2 l2 x2 b2 m2 y2 c2 n2 z2 15 a2 l2 x3 b2 m2 y3 c2 n2 z3 16 a2 l3 x1 b2 m3 y1 c2 n3 z1 17 a2 l3 x2 b2 m3 y2 c2 n3 z2 18 a2 l3 x3 b2 m3 y3 c2 n3 z3 19 a3 l1 x1 b3 m1 y1 c3 n1 z1 20 a3 l1 x2 b3 m1 y2 c3 n1 z2 21 a3 l1 x3 b3 m1 y3 c3 n1 z3 22 a3 l2 x1 b3 m2 y1 c3 n2 z1 23 a3 l2 x2 b3 m2 y2 c3 n2 z2 24 a3 l2 x3 b3 m2 y3 c3 n2 z3 25 a3 l3 x1 b3 m3 y1 c3 n3 z1 26 a3 l3 x2 b3 m3 y2 c3 n3 z2 27 a3 l3 x3 b3 m3 y3 c3 n3 z3 

to add small explanation, mapply goes through 2 arguments simultaneously , applies function it. data.frames lists each column element in list, supplying 2 data.frames mapply, apply whatever function provide first columns, second columns, third... in both data.frames. can use column-wise kronecker product.





wiki

Comments

Popular posts from this blog

Asterisk AGI Python Script to Dialplan does not work -

python - Read npy file directly from S3 StreamingBody -

kotlin - Out-projected type in generic interface prohibits the use of metod with generic parameter -