как вернуть столбец в запросе на основе даты в другой таблице в R - PullRequest
0 голосов
/ 08 апреля 2019

пытаюсь описать подробно. Это первая таблица

itogo=structure(list(cfo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = "НСК", class = "factor"), code = structure(c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("PlanНСК1", "PlanНСК2", 
"PlanНСК3", "PlanНСК4", "PlanНСК5"), class = "factor"), customer_name = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "ТС", class = "factor"), 
    sales_volume_name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = "от 50 до 100 кг", class = "factor"), 
    shop_group_name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = "loc", class = "factor"), product_id = c(11628L, 
    11628L, 11628L, 11628L, 11628L, 11709L, 11709L, 11709L, 11709L, 
    11709L), shop_code = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L), .Label = "02293НСК", class = "factor"), 
    rpost2019.01 = c(3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L), 
    rpost2019.02 = c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), 
    rpost2019.03 = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), 
    rpost2019.04 = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), 
    rpost2019.05 = c(1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L), 
    rpost2019.06 = c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L), 
    regplan.2019.01.meanot.2018.01_amount = c(3794.4, 3794.4, 
    3794.4, 3794.4, 3794.4, 2514.54, 2514.54, 2514.54, 2514.54, 
    2514.54), regplan.2019.02.meanot.2018.02_amount = c(2529.6, 
    2529.6, 2529.6, 2529.6, 2529.6, 1436.88, 1436.88, 1436.88, 
    1436.88, 1436.88), regplan.2019.03.meanot.2018.03_amount = c(4637.6, 
    4637.6, 4637.6, 4637.6, 4637.6, 3592.2, 3592.2, 3592.2, 3592.2, 
    3592.2), regplan.2019.04.meanot.2018.04_amount = c(2529.6, 
    2529.6, 2529.6, 2529.6, 2529.6, 2873.76, 2873.76, 2873.76, 
    2873.76, 2873.76), regplan.2019.05.meanot.2018.05_amount = c(1054, 
    1054, 1054, 1054, 1054, 3412.58982, 3412.58982, 3412.58982, 
    3412.58982, 3412.58982), regplan.2019.06.meanot.2018.06_amount = c(0, 
    0, 0, 0, 0, 1077.66, 1077.66, 1077.66, 1077.66, 1077.66), 
    meanot.2018.03 = structure(c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 
    1L, 1L, 1L), .Label = c("5.000000", "5.500000"), class = "factor"), 
    meanot.2018.04 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
    2L, 2L, 2L), .Label = c("6.000000", "8.000000"), class = "factor"), 
    meanot.2018.05 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
    2L, 2L, 2L), .Label = c("5.000000", "6.333333"), class = "factor"), 
    reg.voz.2019.03.reg.otgruz.план.шт.2019.03 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.00", class = "factor"), 
    reg.voz.2019.04.reg.otgruz.план.шт.2019.04 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.00", class = "factor"), 
    NewTT2019.03 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L), .Label = "0.000000", class = "factor"), NewTT2019.04 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "0.000000", class = "factor"), 
    NewTT2019.03_amount = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L), NewTT2019.04_amount = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L)), .Names = c("cfo", "code", "customer_name", 
"sales_volume_name", "shop_group_name", "product_id", "shop_code", 
"rpost2019.01", "rpost2019.02", "rpost2019.03", "rpost2019.04", 
"rpost2019.05", "rpost2019.06", "regplan.2019.01.meanot.2018.01_amount", 
"regplan.2019.02.meanot.2018.02_amount", "regplan.2019.03.meanot.2018.03_amount", 
"regplan.2019.04.meanot.2018.04_amount", "regplan.2019.05.meanot.2018.05_amount", 
"regplan.2019.06.meanot.2018.06_amount", "meanot.2018.03", "meanot.2018.04", 
"meanot.2018.05", "reg.voz.2019.03.reg.otgruz.план.шт.2019.03", 
"reg.voz.2019.04.reg.otgruz.план.шт.2019.04", "NewTT2019.03", 
"NewTT2019.04", "NewTT2019.03_amount", "NewTT2019.04_amount"), class = "data.frame", row.names = c(NA, 
-10L))

- и второй стол

 anyta=structure(list(data = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L), .Label = c("2019-01-04 00:00:00.000", "2019-02-04 00:00:00.000", 
"2019-03-04 00:00:00.000", "2019-04-04 00:00:00.000", "2019-05-04 00:00:00.000"
), class = "factor"), cfo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L), .Label = "НСК", class = "factor"), customer_name = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "TC", class = "factor"), 
    sales_volume_name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = "от 50 до 100 кг", class = "factor"), 
    shop_group_name = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L), .Label = "loc", class = "factor"), shop_code = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "02293НСК", class = "factor"), 
    product_id = c(11628L, 11628L, 11628L, 11628L, 11628L, 11709L, 
    11709L, 11709L, 11709L, 11709L), code = structure(c(1L, 2L, 
    3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("PlanНСК1", "PlanНСК2", 
    "PlanНСК3", "PlanНСК4", "PlanНСК5"), class = "factor")), .Names = c("data", 
"cfo", "customer_name", "sales_volume_name", "shop_group_name", 
"shop_code", "product_id", "code"), class = "data.frame", row.names = c(NA, 
-10L))

как мы видим во второй таблице, есть столбец data , а в первой таблице нет столбца данных, но есть столбцы int

rpost 2019-01, 2019-02 .... rpost2019-06

01 ... 06 - количество месяцев

01-января

02-февраль

03 Мар

04-апреля

05-мая

06-июня

во второй таблице данных в формате ymd, я должен смотреть только на количество месяцев, здесь 04 , это апрель

так, как это сделать, если во второй таблице в столбце данных номер месяца = 04

тогда все числовые переменные (начиная с rpost) из первой таблицы должны начинаться с этого месяца

т.е. выход

 cfo     code customer_name sales_volume_name shop_group_name product_id shop_code rpost2019.04 rpost2019.05 rpost2019.06 regplan.2019.04.meanot.2018.04_amount
1  НСК PlanНСК1            ТС   от 50 до 100 кг             loc      11628  02293НСК            2            1            2                               2529.60
2  НСК PlanНСК2            ТС   от 50 до 100 кг             loc      11628  02293НСК            2            1            2                               2529.60
3  НСК PlanНСК3            ТС   от 50 до 100 кг             loc      11628  02293НСК            2            1            2                               2529.60
4  НСК PlanНСК4            ТС   от 50 до 100 кг             loc      11628  02293НСК            2            1            2                               2529.60
5  НСК PlanНСК5            ТС   от 50 до 100 кг             loc      11628  02293НСК            2            1            2                               2529.60
6  НСК PlanНСК1            ТС   от 50 до 100 кг             loc      11709  02293НСК            2            3            1                               2873.76
7  НСК PlanНСК2            ТС   от 50 до 100 кг             loc      11709  02293НСК            2            3            1                               2873.76
8  НСК PlanНСК3            ТС   от 50 до 100 кг             loc      11709  02293НСК            2            3            1                               2873.76
9  НСК PlanНСК4            ТС   от 50 до 100 кг             loc      11709  02293НСК            2            3            1                               2873.76
10 НСК PlanНСК5            ТС   от 50 до 100 кг             loc      11709  02293НСК            2            3            1                               2873.76
   regplan.2019.05.meanot.2018.05_amount regplan.2019.06.meanot.2018.06_amount X.
1                                1054.00                                  0.00  …
2                                1054.00                                  0.00  …
3                                1054.00                                  0.00  …
4                                1054.00                                  0.00  …
5                                1054.00                                  0.00  …
6                                3412.59                               1077.66  …
7                                3412.59                               1077.66  …
8                                3412.59                               1077.66  …
9                                3412.59                               1077.66  …
10                               3412.59                               1077.66  …

Так что в выходных 01-03 месяцев отсутствуют. если в таблице anyta, в столбце data указано 05 (МОЖЕТ) так что возвращайте столбцы, где указано 05 месяцев. В столбце данных второй таблицы не может быть другого месяца

Но обратите внимание, что в таблице итого названия столбцов могут отличаться

regplan 2019-01*meanot 2018-01_amount
regplan 2019-02*meanot 2018-02_amount
regplan 2019-03*meanot 2018-03_amount
regplan 2019-04*meanot 2018-04_amount
regplan 2019-05*meanot 2018-05_amount
regplan 2019-06*meanot 2018-06_amount
meanot 2018-03
meanot 2018-04
meanot 2018-05
reg voz 2019-03/reg otgruz план шт 2019-03
reg voz 2019-04/reg otgruz план шт 2019-04
NewTT2019-03
NewTT2019-04
NewTT2019-03_amount
NewTT2019-04_amount

если у нас есть две данные в именах столбцов, таких как

 regplan 2019-01*meanot 2018-01_amount

т., Вывод от regplan 2019-0 4 *** означает 2018-0 4 ** _ сумма

NewTT2019-03_amount

в этом столбце данных выводится из NewTT2019- 04 _amount

Как создать такое условие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...