Как добавить строки в R, которые вычитают 2 другие строки на основе общих переменных? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть фрейм данных, который структурирован как образец ниже. Каждая комбинация date, market, gender и age имеет 3 наблюдения типа: «Новое», «Rea c» и «Активное». Для каждой из этих групп я хотел бы добавить 4-ую строку, в которой содержатся те же самые переменные date, market, gender и age, но разные type и cust и orders столбцы создаются путем вычитания значений type = New cust и orders из значений type = Active cust и order.

Например, я бы хотел go из этого:

date    market    gender    type    age    cust     orders

Apr-18  UK        Female    New     U20    1000     1500
Apr-18  UK        Female    Reac    U20    1000     1750
Apr-18  UK        Female    Active  U20    3000     7000

Для этого:

date    market    gender    type    age    cust     orders

Apr-18  UK        Female    New     U20    1000     1500
Apr-18  UK        Female    Reac    U20    1000     1750
Apr-18  UK        Female    Active  U20    3000     7000
Apr-18  UK        Female    Old     U20    2000     5500

Итак, я вычел строку type = New из строки type = Active и сохранил новые cust и orders чисел в 4-й строке с типом = Старый.

Спасибо!

1 Ответ

2 голосов
/ 15 февраля 2020

Мы можем group_by date, market, gender и age, вычесть cust и orders и добавить type = 'old'. Мы можем связать эти новые строки с исходным набором данных.

library(dplyr)

df %>%
  group_by(date, market, gender, age) %>%
  summarise(cust = cust[type=='Active'] - cust[type=='New'], 
            orders = orders[type=='Active'] - orders[type=='New'], 
            type = 'old') %>%
  bind_rows(df)

#  date   market gender age    cust orders type  
#  <fct>  <fct>  <fct>  <fct> <int>  <int> <chr> 
#1 Apr-18 UK     Female U20    2000   5500 old   
#2 Apr-18 UK     Female U20    1000   1500 New   
#3 Apr-18 UK     Female U20    1000   1750 Reac  
#4 Apr-18 UK     Female U20    3000   7000 Active
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...