[R] Multiplying each row of data.frame by a row in another data.frame

Avi Gross @v|gro@@ @end|ng |rom ver|zon@net
Sat Apr 9 19:52:19 CEST 2022


Within standard R, it is common to take objects that are lists (as a data.frame is) 
apart and apply some function and recombine them. So using my example in an earlier 
message, and hoping this text-mode message is readable, try something like this
to multiply each column of a data.frame by the same vector and return the data.frame.

Note the multiply operation as a function is denoted by `*` including the grave accents.

> orig <- data.frame(a=1:3, b=3:1, c=c(10,15,20))
> orig
  a b  c
1 1 3 10
2 2 2 15
3 3 1 20
> vec <- c(1, 10, 100)
> as.data.frame(lapply(orig, `*`, vec))
    a   b    c
1   1   3   10
2  20  20  150
3 300 100 2000

You can also use sapply but it returns more of a matrix than a data.frame:

> sapply(orig, `*`, vec)
       a   b    c
[1,]   1   3   10
[2,]  20  20  150
[3,] 300 100 2000
> class(sapply(orig, `*`, vec))
[1] "matrix" "array"

Again, there are an amazing number of ways to do anything in R.







-----Original Message-----
From: Kelly Thompson <kt1572757 using gmail.com>
Cc: r-help using r-project.org <r-help using r-project.org>
Sent: Sat, Apr 9, 2022 12:49 pm
Subject: Re: [R] Multiplying each row of data.frame by a row in another data.frame


Does this produce the desired results?
Also, even if this produces your desired results, I am not sure it is
the "best" way to do this. There might be better ways.

data.frame( t ( t(val_df) * (weights$value) )

On Fri, Apr 8, 2022 at 9:57 PM maithili_shiva--- via R-help
<r-help using r-project.org> wrote:
>
> Dear R forum
> weights <- data.frame(id = c("ABC", "DEF",  "ONS"), value = c(1, 2, 5))
> val_df <- data.frame(ABC = c(10, 20, 10, 10, 10), DEF = c(1, 2, 10, 2, 5), ONS = c(100, 100, 200, 100, 100))
>
> > weights
>    id           value1 ABC       12 DEF       23 ONS       5
>
> > val_df
>   ABC DEF ONS1  10   1     1002  20   2     1003  10  10    2004  10   2    1005  10   5    100
> I wish to multilpy each row of data.frame val_df by value column of data.frame weights.
>   ABC    DEF    ONS1  10*1   1*2   100*52  20*1   2*2   100*53  10*1   10*2  200*54  10*1   2*2   100*55  10*1   5*2   100*5
> ie I wish to have output as
> OUTPUT
>   ABC    DEF    ONS1  10    2          5002  20    4         5003  10    20      10004  10    4        5005  10    10     500
>
> O have tried sweep function, even matrix multiplcation etc, but nothing seems to be working.
> Please guide
> Regards
> Maithili
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.


______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.



More information about the R-help mailing list