Кадр данных: Разделите каждую группу на вектор, соответствующий каждой группе в R? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть такой фрейм данных:

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"))

и еще один dataframe векторов:

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"))

Теперь я хочу разделить каждую группу на df1 на соответствующиезначение в df2:

Например, для группы пользователей 1 разделить каждую строку на param_b первый вектор:

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

для пользователя 2 разделить каждую строку на param_b секундуvector.

Посоветуйте, пожалуйста, как я могу разделить сгруппированные пользователем dataframe по векторам для каждой группы?

PS

Если у меня df1 расширен до param_a, param_k, param_p

и df2 расширены соответственно с param_b, param_l, param_r

Как я могу выполнить этот вид операции?@nicola предложила очень хорошее решение, но я хочу его расширить.

1 Ответ

0 голосов
/ 19 ноября 2018

Как то так?

 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...