[R] Multiplying each row of data.frame by a row in another data.frame
m@ithiii_shiv@ m@iii@g oii y@hoo@com
m@ithiii_shiv@ m@iii@g oii y@hoo@com
Sun Apr 10 09:34:29 CEST 2022
Dear all,
Thanks a lot for your valuable input. At the outset, let me clarify first that this was not a homework. In reality I had a data.frame containing returns of 121 risk factors and another data.frame of 121 weights arrived at using Marked to market (MTM) values of these 121 risk factors.
There are 250 returns for each of these 121 risk factors and I wanted to compute portfolio weighted return.
So kindly don't feel this was homework. I just tried to simply my objective.
Thanks a lot "Eric Burger", "Kelly Thompson", "Avi Gross" for your guidance.
Regards
Maithili
On Saturday, 9 April, 2022, 11:23:10 pm IST, Avi Gross via R-help <r-help using r-project.org> wrote:
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.
______________________________________________
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.
[[alternative HTML version deleted]]
More information about the R-help
mailing list