Агрегированные данные условно в R - PullRequest
1 голос
/ 31 марта 2020

Рассмотрим следующий фрейм данных:

d <- data.frame(a = c("s10","s20","s30"),
                b = c("1000","200","1000"),
                c = c("3000","50","60"))
    a   b     c
1   s10 1000  3000
2   s20 200   50
3   s30 1000  60

Я хочу агрегировать его на основе следующего фрейма данных:

e <- data.frame(a = c("s10","s10","s10","s20","s30"),
                b = c("t10","t40","t30","t20","t60"),
                c = c("0.33","0.33","0.33","1","1"))

    a   b   c
1   s10 t10 0.33
2   s10 t40 0.33
3   s10 t30 0.33
4   s20 t20 1
5   s30 t60 1

Итак, я получаю следующую таблицу:

    a   b       c
1   t10 333.3   1000
2   t40 333.3   1000
3   t30 333.3   1000
4   t20 200     50
5   t60 1000    60

То есть из фрейма данных «е» текст «s10» переходит в три разных текста («t10», «t40» и «t30»), поэтому значения из столбцов «b» и «c "во фрейме данных" d "следует умножить на долю из столбца" c "во фрейме данных e (то есть 1 000 * 0,33 и 3 000 * 0,33). И так далее для остальных ценностей.

1 Ответ

1 голос
/ 31 марта 2020

Вот вариант с left_join в столбце 'a', затем transmute путем умножения столбцов

library(dplyr)
left_join(type.convert(e, as.is = TRUE), 
      type.convert(d, as.is = TRUE), by = 'a') %>% 
   transmute(a = b.x, b = c.x * b.y, c = c.x * c.y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...