[R] Adding elements in data.frame subsets and also subtracting an element from the rest elements in data.frame

Bert Gunter gunter.berton at gene.com
Mon Apr 29 15:32:10 CEST 2013


If this is a homework problem, there is a no homework policy on this list.

-- Bert



On Mon, Apr 29, 2013 at 5:24 AM, Katherine Gobin
<katherine_gobin at yahoo.com> wrote:
> Dear R forum
>
> I have a data.frame as
>
> cashflow_df = data.frame(instrument = c("ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC","ABC", "ABC", "PQR", "PQR", "PQR","PQR","PQR","PQR","PQR","PQR","PQR","PQR", "PQR", "PQR", "PQR","PQR", "PQR","PQR","PQR","PQR", "PQR","PQR","UVWXYZ","UVWXYZ", "UVWXYZ", "UVWXYZ", "UVWXYZ","UVWXYZ","UVWXYZ","UVWXYZ", "UVWXYZ", "UVWXYZ"),
>
> id = c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5, 1,1,2,2,3,3,4,4, 5,5),
>
> cashflow = c(5000,5000,505000,5000,5000,505000,5000,5000,505000, 5000,5000, 505000, 5000,5000,505000,500,500,500,102000,500,500,500,102000,500,500,500,102000,500,500,500,102000,500,500,500,102000,8000,808000,8000,808000,8000,808000,8000,808000,8000,808000),
>
> cashflows_pv = c(4931.054, 4479.1116, 431160.8529,4931.9604, 4485.6393, 432064.0228, 4932.5438,4489.8451,432646.2398,4932.1548,4487.0404,432257.9551,4932.6087,4490.3129,432711.0084,493.6326,474.0524,455.2489,82252.0304,493.8083,474.7543,456.4356,82744.9157,493.6003,473.9235,455.031,82161.7368,493.8175,474.7913,456.4982,82770.9849,493.8592,474.9581,456.7804,82888.4556,7451.3118,681810.5522,7462.0148,684153.4992,7441.1294,679585.9186,7426.6407,676427.7274,7427.1225,676532.6262))
>
> #  ______________________________________________________________
>
>> cashflow_df
>    instrument id cashflow cashflows_pv
> 1         ABC  1     5000    4931.0540
> 2         ABC  1     5000    4479.1116
> 3         ABC  1   505000  431160.8529
> 4         ABC  2     5000    4931.9604
> 5         ABC  2     5000    4485.6393
> 6         ABC  2   505000  432064.0228
> 7         ABC  3     5000    4932.5438
> 8         ABC  3     5000    4489.8451
> 9         ABC  3   505000  432646.2398
> 10        ABC  4     5000    4932.1548
> 11        ABC  4     5000    4487.0404
> 12        ABC  4   505000  432257.9551
> 13        ABC  5     5000    4932.6087
> 14        ABC  5     5000    4490.3129
> 15        ABC  5   505000  432711.0084
> 16        PQR  1      500     493.6326
> 17        PQR  1      500     474.0524
> 18        PQR  1      500     455.2489
> 19        PQR  1   102000   82252.0304
> 20        PQR  2      500     493.8083
> 21        PQR  2      500     474.7543
> 22        PQR  2      500     456.4356
> 23        PQR  2   102000   82744.9157
> 24        PQR  3      500     493.6003
> 25        PQR  3      500     473.9235
> 26        PQR  3      500     455.0310
> 27        PQR  3   102000   82161.7368
> 28        PQR  4      500     493.8175
> 29        PQR  4      500     474.7913
> 30        PQR  4      500     456.4982
> 31        PQR  4   102000   82770.9849
> 32        PQR  5      500     493.8592
> 33        PQR  5      500     474.9581
> 34        PQR  5      500     456.7804
> 35        PQR  5   102000   82888.4556
> 36     UVWXYZ  1     8000    7451.3118
> 37     UVWXYZ  1   808000  681810.5522
> 38     UVWXYZ  2     8000    7462.0148
> 39     UVWXYZ  2   808000  684153.4992
> 40     UVWXYZ  3     8000    7441.1294
> 41     UVWXYZ  3   808000  679585.9186
> 42     UVWXYZ  4     8000    7426.6407
> 43     UVWXYZ  4   808000  676427.7274
> 44     UVWXYZ  5     8000    7427.1225
> 45     UVWXYZ  5   808000  676532.6262
>
> # ===============================================
>
> # My PROBLEM
>
>
> For a given instrument and id, I need the totals of cashflow and cashflows_pv  and also the difference of (total_cashflow_pv pertaining to the first ID for the given instrument from total_cashflow_pv for the same instrument) as shown in the fourth column of following output.
>
> output
>
>    instrument id   total_cashflow   total_cashflow_pv
> 1         ABC  1         515000         440571.02
> 2         ABC  2         515000         441481.62
> 3         ABC  3         515000         442068.63
> 4         ABC  4         515000         441677.15
> 5         ABC  5         515000         442133.93
> 6         PQR  1         103500          83674.96
> 7         PQR  2         103500          84169.91
> 8         PQR  3         103500          83584.29
> 9         PQR  4         103500          84196.09
> 10        PQR  5         103500          84314.05
> 11     UVWXYZ  1         816000         689261.86
> 12     UVWXYZ  2         816000         691615.51
> 13     UVWXYZ  3         816000         687027.05
> 14     UVWXYZ  4         816000         683854.37
> 15     UVWXYZ  5         816000         683959.75
>
>
>      cashflow_change
> 1           0.0000      # This is  (440571.02 -  440571.02) 1st ID value - 1st ID value for ABC
> 2         910.6040    # This is  (441481.62 -  440571.02) 2nd ID value - 1st ID value for ABC
> 3        1497.6102   # This is  (442068.63 -  440571.02) 3rd ID value - 1st ID value for ABC
> 4        1106.1318
> 5        1562.9115
> 6           0.0000    # This is  (83674.96 - 83674.96) 1st ID value - 1st ID value for PQR
> 7         494.9496
> 8         -90.6727
> 9         521.1276
> 10        639.0890
> 11          0.0000
> 12       2353.6500
> 13      -2234.8160
> 14      -5407.4959
> 15      -5302.1153   # This is  (683959.75 -689261.86 ) 5th ID value - 1st ID value for UVWXYZ
>
>
> Kindly guide
>
> Regards
>
> Katherine
>
>
>         [[alternative HTML version deleted]]
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list