Hello, I am trying to achieve something which I *think* is possible using rowsum, but a little help should be useful: Consider the following dataframe DF0: A B C 89 1 140 89 06 20 89 29 137 89 52 13 89 57 10 89 97 23 89 1 37 89 1 12 89 1 3 52 1 11 52 1 31 52 1 16 52 1 6 52 1 10 52 1 13 52 1 10 52 1 25 52 1 2 52 59 38 52 97 75 57 1 14 57 1 13 57 1 14 57 114 12 57 1 23 57 06 26 I need create a new dataframe containing the sums of all the rows where B 1 for the different values of A, keeping the rows with other B values the same. That is, for this data sample, the result I expect is something like this (the order of the rows does not matter): A B C 89 1 192 #From adding up: [140 + 37 + 12 + 3] 89 06 20 89 29 137 89 52 13 89 57 10 89 97 23 52 1 124 # From adding up: [11 + 31 + 16 + 6 + 10 + 13 + 10 + 25 + 2] 52 59 38 52 97 75 57 1 64 #From adding up: [14 +13 +14 +23] 57 114 12 57 06 26 Now, I now it should be possible to first separate the data in two sets, where DF1 <- DF0[DF0$B != 1,] DF2 <- DF0[DF0$B == 1,] Then I should apply sumrow to DF2 with some "group" vector, but I do not know where to go from here. Can anyone help? Thanks in advance! -- View this message in context: http://r.789695.n4.nabble.com/rowsum-tp3003551p3003551.html Sent from the R help mailing list archive at Nabble.com.
Hi: Here's one way, although it can be improved a bit. d1 <- aggregate(C ~ A, data = subset(DF0, B == 1), FUN = sum) d2 <- subset(DF0, B != 1) # B not in d1, so need to replace it> d1A C 1 52 124 2 57 64 3 89 192 d1$B <- rep(1, nrow(d1)) d1 <- d1[, c(1, 3, 2)] # reorder columns to permit cbinding DF1 <- rbind(d1, d2)> DF1[order(DF1$A, DF1$B), ]A B C 1 52 1 124 19 52 59 38 20 52 97 75 2 57 1 64 26 57 6 26 24 57 114 12 3 89 1 192 21 89 6 20 31 89 29 137 4 89 52 13 5 89 57 10 6 89 97 23 HTH, Dennis On Wed, Oct 20, 2010 at 2:42 AM, xtracto <b2017700@lhsdv.com> wrote:> > Hello, > > I am trying to achieve something which I *think* is possible using rowsum, > but a little help should be useful: > > Consider the following dataframe DF0: > A B C > 89 1 140 > 89 06 20 > 89 29 137 > 89 52 13 > 89 57 10 > 89 97 23 > 89 1 37 > 89 1 12 > 89 1 3 > 52 1 11 > 52 1 31 > 52 1 16 > 52 1 6 > 52 1 10 > 52 1 13 > 52 1 10 > 52 1 25 > 52 1 2 > 52 59 38 > 52 97 75 > 57 1 14 > 57 1 13 > 57 1 14 > 57 114 12 > 57 1 23 > 57 06 26 > > > I need create a new dataframe containing the sums of all the rows where B > 1 for the different values of A, keeping the rows with other B values the > same. That is, for this data sample, the result I expect is something like > this (the order of the rows does not matter): > > A B C > 89 1 192 #From adding up: [140 + 37 + 12 + 3] > 89 06 20 > 89 29 137 > 89 52 13 > 89 57 10 > 89 97 23 > 52 1 124 # From adding up: [11 + 31 + 16 + 6 + 10 + 13 + 10 + > 25 + 2] > 52 59 38 > 52 97 75 > 57 1 64 #From adding up: [14 +13 +14 +23] > 57 114 12 > 57 06 26 > > > Now, I now it should be possible to first separate the data in two sets, > where > DF1 <- DF0[DF0$B != 1,] > DF2 <- DF0[DF0$B == 1,] > > Then I should apply sumrow to DF2 with some "group" vector, but I do not > know where to go from here. > > Can anyone help? > Thanks in advance! > > > -- > View this message in context: > http://r.789695.n4.nabble.com/rowsum-tp3003551p3003551.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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]]
Another option to consider:> xA B C 1 89 1 140 2 89 6 20 3 89 29 137 4 89 52 13 5 89 57 10 6 89 97 23 7 89 1 37 8 89 1 12 9 89 1 3 10 52 1 11 11 52 1 31 12 52 1 16 13 52 1 6 14 52 1 10 15 52 1 13 16 52 1 10 17 52 1 25 18 52 1 2 19 52 59 38 20 52 97 75 21 57 1 14 22 57 1 13 23 57 1 14 24 57 114 12 25 57 1 23 26 57 6 26> require(sqldf) > sqldf("select A, B, sum(C) from x group by A, B")A B sum(C) 1 52 1 124 2 52 59 38 3 52 97 75 4 57 1 64 5 57 6 26 6 57 114 12 7 89 1 192 8 89 6 20 9 89 29 137 10 89 52 13 11 89 57 10 12 89 97 23>On Wed, Oct 20, 2010 at 5:42 AM, xtracto <b2017700 at lhsdv.com> wrote:> > Hello, > > I am trying to achieve something which I *think* is possible using rowsum, > but a little help should be useful: > > Consider the following dataframe DF0: > A ? ? ? B ? ? ? C > 89 ? ? ?1 ? ? ? 140 > 89 ? ? ?06 ? ? ?20 > 89 ? ? ?29 ? ? ?137 > 89 ? ? ?52 ? ? ?13 > 89 ? ? ?57 ? ? ?10 > 89 ? ? ?97 ? ? ?23 > 89 ? ? ?1 ? ? ? 37 > 89 ? ? ?1 ? ? ? 12 > 89 ? ? ?1 ? ? ? 3 > 52 ? ? ?1 ? ? ? 11 > 52 ? ? ?1 ? ? ? 31 > 52 ? ? ?1 ? ? ? 16 > 52 ? ? ?1 ? ? ? 6 > 52 ? ? ?1 ? ? ? 10 > 52 ? ? ?1 ? ? ? 13 > 52 ? ? ?1 ? ? ? 10 > 52 ? ? ?1 ? ? ? 25 > 52 ? ? ?1 ? ? ? 2 > 52 ? ? ?59 ? ? ?38 > 52 ? ? ?97 ? ? ?75 > 57 ? ? ?1 ? ? ? 14 > 57 ? ? ?1 ? ? ? 13 > 57 ? ? ?1 ? ? ? 14 > 57 ? ? ?114 ? ? 12 > 57 ? ? ?1 ? ? ? 23 > 57 ? ? ?06 ? ? ?26 > > > I need create a new dataframe containing the sums of all the rows where B > 1 for the different values of A, keeping the rows with other B values the > same. That is, for this data sample, the result I expect is something like > this (the order of the rows does not matter): > > A ? ? ? B ? ? ? C > 89 ? ? ?1 ? ? ? 192 ? ?#From adding up: [140 + 37 + 12 + 3] > 89 ? ? ?06 ? ? ?20 > 89 ? ? ?29 ? ? ?137 > 89 ? ? ?52 ? ? ?13 > 89 ? ? ?57 ? ? ?10 > 89 ? ? ?97 ? ? ?23 > 52 ? ? ?1 ? ? ? 124 ? ?# From adding up: [11 + 31 + 16 + 6 + 10 + 13 + 10 + 25 + 2] > 52 ? ? ?59 ? ? ?38 > 52 ? ? ?97 ? ? ?75 > 57 ? ? ?1 ? ? ? 64 ? ? #From adding up: [14 +13 +14 +23] > 57 ? ? ?114 ? ? 12 > 57 ? ? ?06 ? ? ?26 > > > Now, I now it should be possible to first separate the data in two sets, > where > DF1 <- DF0[DF0$B != 1,] > DF2 <- DF0[DF0$B == 1,] > > Then I should apply sumrow to DF2 with some "group" vector, but I do not > know where to go from here. > > Can anyone help? > Thanks in advance! > > > -- > View this message in context: http://r.789695.n4.nabble.com/rowsum-tp3003551p3003551.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?