Возврат значений в R для логики - PullRequest
0 голосов
/ 06 мая 2018

Мой запрос немного сложен.

Ниже представлены мои данные.

   **S.no      Date     City Sales  diff Indicator
1     1  1/1/2017 New York  2795     0         0
2     2 1/31/2017 New York  4248  1453         0
3     3  3/2/2017 New York  1330 -2918         1
4     4  4/1/2017 New York  3535  2205         0
5     5  5/1/2017 New York  4330   795         0
6     6 5/31/2017 New York  3360  -970         1
7     7 6/30/2017 New York  2238 -1122         1
8     8  1/1/2017    Paris  1451     0         0
9     9 1/31/2017    Paris  2339   888         0
10   10  3/2/2017    Paris  2029  -310         1
11   11  4/1/2017    Paris  1850  -179         1
12   12  5/1/2017    Paris  2800   950         1
13   13 5/31/2017    Paris  1986  -814         0
14   14 6/30/2017    Paris  3776  1790         0
15   15  1/1/2017   London  1646     0         0
16   16 1/31/2017   London  3575  1929         0
17   17  3/2/2017   London  1161 -2414         1
18   18  4/1/2017   London  1766   605         0
19   19  5/1/2017   London  2799  1033         0
20   20 5/31/2017   London  2761   -38         1
21   21 6/30/2017   London  1048 -1713         1**

diff - продажи за текущий месяц и продажи за последний месяц для каждой группы, а индикатор - когда разница отрицательная или положительная.

Я хочу вычислить логику для каждой группы, начиная с последнего ряда до первого ряда, или в обратном порядке.

Я хочу видеть в обратном порядке значение продаж, когда индикатор был равен 1. Сравнение, которое захватило значение продаж с пороговым значением (2000), для следующих шагов.

Ниже приведены два случая сравнения (Capture Sales v / s Threshold). а. Если зафиксированное значение продаж, когда Показатель является первым 1 (начиная с последней строки до 1-й строки), меньше 2000, то сохраненные значения сохраняются в новом наборе данных для каждой группы.

б. Если зафиксированный объем продаж, когда Показатель является первым 1 (начиная с последней строки до 1-й строки), превышает 2000, пропустите эту строку Показатель = 1 и перейдите к следующей строке, где Показатель = 1, и повторите тот же шаг для pt.a) и pt. б)

Я хочу перенести результат в новый набор данных, который будет содержать по одной строке для каждого города, предоставляя мне «Продажную стоимость» для вышеупомянутой логики вместе с датой.

Я просто хочу понять, как я могу вызвать эту логику в R. Поможет ли функция rle?

Result:
S.no   Date    City    Value(Sales)
3.  3/2/2017  New York   1330
11. 4/1/2017  Paris      1850
21. 6/30/2017 London     1048

Спасибо, J * * тысяча двадцать-три

1 Ответ

0 голосов
/ 06 мая 2018

Если мы предполагаем, что ваши данные уже упорядочены в порядке возрастания, вы можете сделать следующее с базой R:

threshold <-  2000

my_new_df <- my_df[my_df$Indicator == 1 & my_df$Sales < threshold, ]
my_new_df

#    S.no       Date     City Sales  diff Indicator
# 3     3 2017-03-02 New York  1330 -2918         1
# 11   11 2017-04-01    Paris  1850  -179         1
# 17   17 2017-03-02   London  1161 -2414         1
# 21   21 2017-06-30   London  1048 -1713         1

Теперь у нас есть все строки, где индикатор равен единице, а значение Salse меньше нашего порога. Но Лондон должен ссориться, и мы хотим только последнего:

my_new_df <- my_new_df[!duplicated(my_new_df$City, fromLast = T),
                       c("S.no", "Date", "City", "Sales")]
my_new_df
#    S.no       Date     City Sales
# 3     3 2017-03-02 New York  1330
# 11   11 2017-04-01    Paris  1850
# 21   21 2017-06-30   London  1048

С аргументом fromLast в duplicated мы начинаем в последнем ряду, чтобы проверить, был ли Город уже в наборе данных.

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