mat is a matrix with X and Y values.> matX Y [1,] 56 20 [2,] 56 21 [3,] 2 50 [4,] 3 46 [5,] 18 77 [6,] 57 12 [7,] 57 36 [8,] 95 45 [9,] 65 23 [10,] 33 25 [11,] 33 98 [12,] 63 96 [13,] 66 75 [14,] 99 54 [15,] 78 65 [16,] 75 69 [17,] 54 68 [18,] 54 67 [19,] 0 22 [20,] 14 74 [21,] 15 52 [22,] 46 10 [23,] 6 20 [24,] 6 30 As you can see, some of the X values repeat. I wish to maintain only one of the X values that is repeated, however, I would like to have the sum of the corresponding Y values. For example, the X value of 6 repeats, with values 20 and 30. In the output, I would like to have 6 as X value, with the corresponding Y value of 50 (20+30). The output from mat above should be:> mat1X1 Y1 [1,] 56 41.0 [2,] 2 50.0 [3,] 3 46.0 [4,] 18 77.0 [5,] 57 48.0 [6,] 95 45.0 [7,] 65 23.0 [8,] 33 123.0 [9,] 63 96.0 [10,] 66 75.0 [11,] 99 54.0 [12,] 78 65.0 [13,] 75 69.0 [14,] 54 67.5 [15,] 0 22.0 [16,] 14 74.0 [17,] 15 52.0 [18,] 46 10.0 [19,] 6 50.0 I have not been able to come up with a code, I was wondering if someone can help me with a code to handle this. Thank you in advance for your help, JN [[alternative HTML version deleted]]
Hi Juliet, Here are two options: with(mat, aggregate(Y, list(X), sum)) with(mat, tapply(Y, list(X), sum)) See ?aggregate and ?tapply for more information. HTH, Jorge On Fri, Mar 12, 2010 at 3:28 PM, Juliet Ndukum <> wrote:> mat is a matrix with X and Y values. > > mat > X Y > [1,] 56 20 > [2,] 56 21 > [3,] 2 50 > [4,] 3 46 > [5,] 18 77 > [6,] 57 12 > [7,] 57 36 > [8,] 95 45 > [9,] 65 23 > [10,] 33 25 > [11,] 33 98 > [12,] 63 96 > [13,] 66 75 > [14,] 99 54 > [15,] 78 65 > [16,] 75 69 > [17,] 54 68 > [18,] 54 67 > [19,] 0 22 > [20,] 14 74 > [21,] 15 52 > [22,] 46 10 > [23,] 6 20 > [24,] 6 30 > > As you can see, some of the X values repeat. I wish to maintain only one of > the X values that is repeated, however, I would like to have the sum of the > corresponding Y values. For example, the X value of 6 repeats, with values > 20 and 30. In the output, I would like to have 6 as X value, with the > corresponding Y value of 50 (20+30). > > The output from mat above should be: > > mat1 > X1 Y1 > [1,] 56 41.0 > [2,] 2 50.0 > [3,] 3 46.0 > [4,] 18 77.0 > [5,] 57 48.0 > [6,] 95 45.0 > [7,] 65 23.0 > [8,] 33 123.0 > [9,] 63 96.0 > [10,] 66 75.0 > [11,] 99 54.0 > [12,] 78 65.0 > [13,] 75 69.0 > [14,] 54 67.5 > [15,] 0 22.0 > [16,] 14 74.0 > [17,] 15 52.0 > [18,] 46 10.0 > [19,] 6 50.0 > > I have not been able to come up with a code, I was wondering if someone can > help me with a code to handle this. > > Thank you in advance for your help, > JN > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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. >[[alternative HTML version deleted]]
Here is a suggestion: tapply(mat[,2], as.factor(m[,1]), sum) Cheers, /Ali On Fri, Mar 12, 2010 at 15:28, Juliet Ndukum <jpntsang at yahoo.com> wrote:> mat is a matrix with X and Y values. >> mat > ? ? ? X ?Y > ?[1,] 56 20 > ?[2,] 56 21 > ?[3,] ?2 50 > ?[4,] ?3 46 > ?[5,] 18 77 > ?[6,] 57 12 > ?[7,] 57 36 > ?[8,] 95 45 > ?[9,] 65 23 > [10,] 33 25 > [11,] 33 98 > [12,] 63 96 > [13,] 66 75 > [14,] 99 54 > [15,] 78 65 > [16,] 75 69 > [17,] 54 68 > [18,] 54 67 > [19,] ?0 22 > [20,] 14 74 > [21,] 15 52 > [22,] 46 10 > [23,] ?6 20 > [24,] ?6 30 > > As you can see, some of the X values repeat. I wish to maintain only one of the X values that is repeated, however, I would like to have the sum of the corresponding Y values. For example, the X value of 6 repeats, with values 20 and 30. In the output, I would like to have 6 as X value, with the corresponding Y value of 50 (20+30). > > The output from mat above should be: >> mat1 > ? ? ?X1 ? ?Y1 > ?[1,] 56 ?41.0 > ?[2,] ?2 ?50.0 > ?[3,] ?3 ?46.0 > ?[4,] 18 ?77.0 > ?[5,] 57 ?48.0 > ?[6,] 95 ?45.0 > ?[7,] 65 ?23.0 > ?[8,] 33 123.0 > ?[9,] 63 ?96.0 > [10,] 66 ?75.0 > [11,] 99 ?54.0 > [12,] 78 ?65.0 > [13,] 75 ?69.0 > [14,] 54 ?67.5 > [15,] ?0 ?22.0 > [16,] 14 ?74.0 > [17,] 15 ?52.0 > [18,] 46 ?10.0 > [19,] ?6 ?50.0 > > I have not been able to come up with a code, I was wondering if someone can help me with a code to handle this. > > Thank you in advance for your help, > JN > > > > ? ? ? ?[[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. >