我的數據是這樣的一列:創建它們的值是基於一定條件的R中另一列值的總和
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,其中對於每個具有連續重複日期的ID,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,以便連續重複每個ID的日期,除非列CO具有值,並且在這種情況下FLAG值變爲2.例如,參見第9到11行。在行6到8的情況下,日期連續重複,但是FLAG列沒有連續的1。因此,在這種情況下,1不會連續出現,或者在某個特定日期和ID中出現隔離時,TDD1值應該與該行的DO值相同。另請參閱行19,20。另一點,如果在具有相同日期的一系列行中出現2的標誌值,則需要重置TDD1列的計算。例如,請參見第21到25行。請注意,第21行和第22行的TDD1值爲1370(670 + 700),行24,25的TDD1值爲1500(1000 + 500)。
如果您可以爲此提供r代碼將會非常有幫助。謝謝。
你有沒有對此做過任何嘗試? – DMT 2014-09-25 22:01:14
@DMT:我做了不成功的嘗試。我無法獲得能夠滿足上述所有情況的代碼。我看到它的方式,cumsum()在這種情況下可用於計算DO值。但是,具有CO值的行增加了複雜性。當FLAG = 2時,在具有相同日期連續重複的行之間出現計算需要重置。有什麼想法嗎? – 2014-09-25 22:12:53
您是否試過,而不是創建一個處理整個事件的一般函數,以處理連續重複日期的批次?以這種方式分解您的問題似乎讓生活變得容易很多,假設我正確理解當計算TDD1 – DMT 2014-09-25 22:19:47