SteveS
SteveS

Reputation: 4040

Dataframe: Divide each group by a vector corresponding to each group in R?

I have a data frame like this:

df1 <- structure(list(user_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), param_a = c(123, 
2.3, -9, 1, -0.03333, 4, -41, -12, 0.89)), .Names = c("user_id", 
"param_a"), row.names = c(NA, -9L), class = c("tbl_df", "tbl", 
"data.frame"))

and another dataframe of vectors:

df2 <- structure(list(user_id = c(1, 2, 3), param_b = c(34, 12, -0.89
)), .Names = c("user_id", "param_b"), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

Now I want to divide each group in df1 by corresponding value in df2:

For example for a group of user 1 divide each row by param_b first vector:

    user_id param_a
    1       123/34 
    1       2.3/34 
    1      -9/34
    2       1/12
    2      -0.03333/12
    2       4/12
....

for user 2 divide each row by param_b second vector.

Please advise how can I divide a grouped by user dataframe by a vector per each group?

P.S

If I have df1 extended to param_a, param_k, param_p

and df2 extended accordingly with param_b, param_l, param_r

How can I perform this kind of operation? @nicola suggested a very nice solution but I want to extend it.

Upvotes: 0

Views: 67

Answers (1)

jyjek
jyjek

Reputation: 2707

Something like this?

 df1%>%
       left_join(df2)%>%
       mutate(result=param_a/param_b)
    Joining, by = "user_id"
    # A tibble: 9 x 4
      user_id   param_a param_b    result
        <dbl>     <dbl>   <dbl>     <dbl>
    1       1  123        34      3.62   
    2       1    2.3      34      0.0676 
    3       1   -9        34     -0.265  
    4       2    1        12      0.0833 
    5       2   -0.0333   12     -0.00278
    6       2    4        12      0.333  
    7       3  -41        -0.89  46.1    
    8       3  -12        -0.89  13.5    
    9       3    0.89     -0.89  -1 

Upvotes: 1

Related Questions