psiu psiu - 1 year ago 55
R Question

Sum pairwise rows with R?

My input is

df1 <- data.frame(Row=c("row1", "row2", "row3", "row4", "row5"),
A=c(1,2,3,5.5,5),
B=c(2,2,2,2,0.5),
C= c(1.5,0,0,2.1,3))


It look like this:

# Row1 1 2 1.5
# Row2 2 2 0
# Row3 3 2 0
# Row4 5.5 2 2.1
# Row5 5 0.5 3


I want to get the sum of all these pairs of rows, with the following equation. Let's said for Row1 and Row2 pairs: I want to multiply each column's entry and sum them into one final answer, for example-


  • Row1-Row2 answer is
    (1*2) + (2*2)+ (1.5 *0)
    =
    6

  • Row1-Row3 answer is
    (1*3) + (2*2) + (1.5*0)
    =
    7



I want to do all analysis for each pairs of row and get a result data frame like this:

row1 row2 6
row1 row3 7
row1 row4 12.65
row1 row5 10.5
row2 row3 10
row2 row4 15
row2 row5 11
row3 row4 20.5
row3 row5 16
row4 row5 34.8


How can I do this with R? Thanks a lot for comments.

Answer Source
  1. Create all the combinations you need with combn. t is used to transpose the matrix as you expect it to be formatted.
  2. Use apply to iterate over the indices created in step 1. Note that we use negative indexing so we don't try to sum the Row column.
  3. Bind the two results together.

`

ind <- t(combn(nrow(df1),2))
out <- apply(ind, 1, function(x) sum(df1[x[1], -1] * df1[x[2], -1]))
cbind(ind, out)

           out
[1,] 1 2  6.00
[2,] 1 3  7.00
[3,] 1 4 12.65
 .....
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download