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

2022-04-10 Thread maithili_shiva--- via R-help
 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 
 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 
Cc: r-help@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
 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@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@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@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]]

__
R-help@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.


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

2022-04-09 Thread Avi Gross via R-help
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   bc
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   bc
[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 
Cc: r-help@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
 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@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@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@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.


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

2022-04-09 Thread Eric Berger
This looks like homework, which is not permitted on this list. But
giving you the benefit of the doubt, here are two ways to do it

> as.matrix(val_df) * matrix(rep(weights$value,5),ncol=3,byrow = TRUE)
 ABC DEF  ONS
[1,]  10   2  500
[2,]  20   4  500
[3,]  10  20 1000
[4,]  10   4  500
[5,]  10  10  500
> t(apply(as.matrix(val_df),MAR=1,function(v) v * weights$value))

HTH,
Eric


On Sat, Apr 9, 2022 at 7:57 AM maithili_shiva--- via R-help
 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  102004  10   2
> 1005  10   5100
> I wish to multilpy each row of data.frame val_df by value column of 
> data.frame weights.
>   ABCDEFONS1  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
>   ABCDEFONS1  102  5002  204 5003  1020   
>10004  1045005  1010 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@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@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.