Мои данные выглядит следующим образом:Создать столбец, значения которого являются суммами значений в другом столбце, основанные на определенных условиях в г
ROW ID DATE DO CO FLAG
1 6405 9/16/2010 1000 . 1
2 6405 9/16/2010 0 32 2
3 6405 9/17/2010 500 . 1
4 6405 9/17/2010 1000 . 1
5 6405 9/17/2010 1000 . 1
6 6405 9/18/2010 1000 . 1
7 6405 9/18/2010 0 37 2
8 6405 9/18/2010 1250 . 1
9 6405 9/19/2010 1000 . 1
10 6405 9/19/2010 1000 . 1
11 6405 9/19/2010 0 65 2
12 6405 9/20/2010 500 . 0
13 6405 9/21/2010 1250 . 0
14 2654 8/4/2010 1000 . 0
15 2654 8/5/2010 0 15 2
16 2654 8/5/2010 900 . 1
17 2654 8/5/2010 300 . 1
18 2654 8/6/2010 750 . 0
19 2654 8/7/2010 1000 . 1
20 2654 8/7/2010 0 45 2
21 4567 6/8/2010 670 . 1
22 4567 6/8/2010 700 . 1
23 4567 6/8/2010 0 34 2
24 4567 6/8/2010 1000 . 1
25 4567 6/8/2010 500 . 1
Мои данные должны выглядеть следующим образом:
ROW ID DATE DO CO FLAG TDD1
1 6405 9/16/2010 1000 . 1 1000
2 6405 9/16/2010 0 32 2 0
3 6405 9/17/2010 500 . 1 2500
4 6405 9/17/2010 1000 . 1 2500
5 6405 9/17/2010 1000 . 1 2500
6 6405 9/18/2010 1000 . 1 1000
7 6405 9/18/2010 0 37 2 0
8 6405 9/18/2010 1250 . 1 1250
9 6405 9/19/2010 1000 . 1 2000
10 6405 9/19/2010 1000 . 1 2000
11 6405 9/19/2010 0 65 2 0
12 6405 9/20/2010 500 . 0 500
13 6405 9/21/2010 1250 . 0 1250
14 2654 8/4/2010 1000 . 0 1000
15 2654 8/5/2010 0 15 2 0
16 2654 8/5/2010 900 . 1 1200
17 2654 8/5/2010 300 . 1 1200
18 2654 8/6/2010 750 . 0 750
19 2654 8/7/2010 1000 . 1 1000
20 2654 8/7/2010 0 45 2 0
21 4567 6/8/2010 670 . 1 1370
22 4567 6/8/2010 700 . 1 1370
23 4567 6/8/2010 0 34 2 0
24 4567 6/8/2010 1000 . 1 1500
25 4567 6/8/2010 500 . 1 1500
Так что я хочу для создания столбца TDD1, где для каждого идентификатора, последовательно повторяющего даты, соответствующее значение в столбце TDD1 должно быть суммой значений в столбце DO для тех последовательно повторяющихся дат. Например, см. Строки 3,4,5.
Если значение столбца FLAG равно 2 или 0, то соответствующее значение TDD1 должно быть значением DO для этой строки. Например, см. Строки 2,7,11,15 и 20 (для FLAG = 2) и строки 12,13,14,18 и 23 (для FLAG = 0).
Столбец FLAG последовательно повторяет 1 для последовательно повторяющихся дат для каждого идентификатора, за исключением случаев, когда столбец СО имеет значение, и в этом случае значение FLAG равно 2. Например, см. Строки с 9 по 11. В случае строк с 6 по 8, даты повторяются последовательно, однако столбец FLAG не имеет последовательных 1. Таким образом, в таких ситуациях, когда 1 не происходят последовательно или происходят изолированно для конкретной даты и идентификатора, значение TDD1 должно быть таким же, как значение DO для этой строки. Также смотрите строки 19, 20.
Другое значение, если значение FLAG 2 встречается в ряду строк, имеющих одинаковые даты, вычисление столбца TDD1 необходимо сбросить. Например, см. Строки с 21 по 25. Обратите внимание, что строки 21 и 22 имеют значение TDD1 1370 (670 + 700), а строки 24,25 имеют значение TDD1 1500 (1000 + 500).
Было бы очень полезно, если бы вы могли предоставить код r для этого. Спасибо.
Вы делали какие-либо попытки на этом? – DMT
@DMT: Я сделал неудачные попытки. Я не могу прийти к коду, который может удовлетворить все вышеперечисленные ситуации. Способ, которым я его вижу, cumsum() имеет свою утилиту в этом сценарии для вычисления значений DO. Однако строки, имеющие значения СО, увеличивают сложность. И вычисление необходимо сбросить, когда FLAG = 2 происходит между рядами с одинаковой датой повторения последовательно. Есть предположения? –
Вы пытались, вместо того, чтобы создавать общую функцию, которая обрабатывает все это одним выстрелом, обрабатывать партии последовательно повторяющихся дат? Исключение вашей проблемы таким образом, похоже, облегчает жизнь, предполагая, что я правильно понимаю, что только ссылки с одинаковыми датами связаны при вычислении TDD1 – DMT