Объединить агрегированные данные с возвратом реальных значений в R - PullRequest
0 голосов
/ 18 марта 2019

В двух наборах данных есть ключевые столбцы ad_set_id.1 (из att1) и ad_set_id из (sp1) (к этим столбцам присоединяются данные)

Здесь количество категорий.Например, 23842689912150735 имеет 4 строки

> att1
# A tibble: 190 x 2
   adgroup_id            n
   <chr>             <int>
 1 ""                83370
 2 23842662683520158     1
 3 23842679516650158     1
 4 23842689429990735     1
 5 23842689432190735     1
 6 23842689436120735     2
 7 23842689442070735     3
 8 23842689912150735     4
 9 23842689919350735     1
10 23842718977600752    10
# ... with 180 more rows

-

  sp1  ad_set_id             n
   <chr>             <int>
 1 0                     5
 2 23842582990160276    38
 3 23842586880190112    28
 4 23842593781850548    35
 5 23842604878970288    39
 6 23842607261660516    27
 7 23842665260900648    28
 8 23842671363180112     3
 9 23842675132030648    27
10 23842702776810640    36

как внутреннее объединение этих идентификаторов (агрегированных данных)?например, идентификаторы 23842593781850500 и 123456 находятся в двух наборах данных и имеют 21 строку.

id                  count
23842593781850500       21
123456                  21

, но затем получают все значения для этих идентификаторов.

Здесь приведены полные данные этих идентификаторов для использованных переменных иrealp (наборы данных sp1 и att1 в полной версии в одном наборе данных)

mydat=structure(list(ad_set_id = c(23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 123456, 
123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
123456, 123456, 123456, 123456), spent = c(13L, 16L, 16L, 16L, 
17L, 13L, 19L, 12L, 10L, 19L, 10L, 12L, 17L, 10L, 19L, 14L, 15L, 
20L, 19L, 12L, 10L, 12L, 16L, 16L, 19L, 17L, 20L, 14L, 10L, 10L, 
10L, 20L, 13L, 19L, 15L, 20L, 12L, 18L, 15L, 19L, 14L, 14L), 
    ad_set_id.1 = c(23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
    123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
    123456, 123456, 123456, 123456, 123456), realp = c(7L, 6L, 
    9L, 7L, 9L, 9L, 7L, 9L, 7L, 5L, 9L, 9L, 9L, 10L, 6L, 6L, 
    6L, 6L, 6L, 10L, 5L, 79L, 99L, 72L, 91L, 85L, 97L, 93L, 51L, 
    86L, 78L, 71L, 53L, 61L, 100L, 59L, 52L, 99L, 98L, 65L, 93L, 
    56L)), .Names = c("ad_set_id", "spent", "ad_set_id.1", "realp"
), class = "data.frame", row.names = c(NA, -42L))

Т.е. из полных данных создайте агрегированные данные, затем объедините их и для сопоставленных данных верните реальное наблюдение для использованных переменных из sp1 (ad_set_id потрачено),и realp из att1 (ad_set_id.1)

Т.е..

1.The first we join aggregate group
2.The second for matched data take data from full table

и если сумма для realp> сумма потрачена, тогда этот идентификатор получает флаг 1, иначе 0

вывод

           ad_set_id spent       ad_set_id.1 realp flag
1  23842593781850500    13 23842593781850500     7    0
2  23842593781850500    16 23842593781850500     6    0
3  23842593781850500    16 23842593781850500     9    0
4  23842593781850500    16 23842593781850500     7    0
5  23842593781850500    17 23842593781850500     9    0
6  23842593781850500    13 23842593781850500     9    0
7  23842593781850500    19 23842593781850500     7    0
8  23842593781850500    12 23842593781850500     9    0
9  23842593781850500    10 23842593781850500     7    0
10 23842593781850500    19 23842593781850500     5    0
11 23842593781850500    10 23842593781850500     9    0
12 23842593781850500    12 23842593781850500     9    0
13 23842593781850500    17 23842593781850500     9    0
14 23842593781850500    10 23842593781850500    10    0
15 23842593781850500    19 23842593781850500     6    0
16 23842593781850500    14 23842593781850500     6    0
17 23842593781850500    15 23842593781850500     6    0
18 23842593781850500    20 23842593781850500     6    0
19 23842593781850500    19 23842593781850500     6    0
20 23842593781850500    12 23842593781850500    10    0
21 23842593781850500    10 23842593781850500     5    0
22            123456    12            123456    79    1
23            123456    16            123456    99    1
24            123456    16            123456    72    1
25            123456    19            123456    91    1
26            123456    17            123456    85    1
27            123456    20            123456    97    1
28            123456    14            123456    93    1
29            123456    10            123456    51    1
30            123456    10            123456    86    1
31            123456    10            123456    78    1
32            123456    20            123456    71    1
33            123456    13            123456    53    1
34            123456    19            123456    61    1
35            123456    15            123456   100    1
36            123456    20            123456    59    1
37            123456    12            123456    52    1
38            123456    18            123456    99    1
39            123456    15            123456    98    1
40            123456    19            123456    65    1
41            123456    14            123456    93    1
42            123456    14            123456    56    1

1 Ответ

1 голос
/ 18 марта 2019

Кажется, все, что вам нужно, это использовать aggregate с функцией sum (см. документы ):

mydat=structure(list(ad_set_id = c(23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 23842593781850500, 
23842593781850500, 23842593781850500, 23842593781850500, 123456, 
123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
123456, 123456, 123456, 123456), spent = c(13L, 16L, 16L, 16L, 
17L, 13L, 19L, 12L, 10L, 19L, 10L, 12L, 17L, 10L, 19L, 14L, 15L, 
20L, 19L, 12L, 10L, 12L, 16L, 16L, 19L, 17L, 20L, 14L, 10L, 10L, 
10L, 20L, 13L, 19L, 15L, 20L, 12L, 18L, 15L, 19L, 14L, 14L), 
    ad_set_id.1 = c(23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    23842593781850500, 23842593781850500, 23842593781850500, 
    123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
    123456, 123456, 123456, 123456, 123456, 123456, 123456, 123456, 
    123456, 123456, 123456, 123456, 123456), realp = c(7L, 6L, 
    9L, 7L, 9L, 9L, 7L, 9L, 7L, 5L, 9L, 9L, 9L, 10L, 6L, 6L, 
    6L, 6L, 6L, 10L, 5L, 79L, 99L, 72L, 91L, 85L, 97L, 93L, 51L, 
    86L, 78L, 71L, 53L, 61L, 100L, 59L, 52L, 99L, 98L, 65L, 93L, 
    56L)), .Names = c("ad_set_id", "spent", "ad_set_id.1", "realp"
), class = "data.frame", row.names = c(NA, -42L))

x <- aggregate(.~ad_set_id,mydat,sum)

x$flag <- 0+(x$realp > x$spent)

и тогда вы получите:

> x
     ad_set_id spent  ad_set_id.1 realp flag
1 1.234560e+05   323 2.592576e+06  1638    1
2 2.384259e+16   309 5.006945e+17   157    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...