Create new data frame with conditional sums
Dear Jason, The code could look something like: dummyData = data.frame(Tract=seq(1, 10, by=1), ?? ?Pct = c(0.05,0.03,0.01,0.12,0.21,0.04,0.07,0.09,0.06,0.03), ?? ?Totpop = c(4000,3500,4500,4100,3900,4250,5100,4700,4950,4800)) # Define the cutoffs # - allow for duplicate entries; by = 0.03; # by = 0.01; cutoffs <- seq(0, 0.20, by = by) # Create a new column with cutoffs dummyData$Cutoff <- cut(dummyData$Pct, breaks = cutoffs, ?? ?labels = cutoffs[-1], ordered_result = TRUE) # Sort data # - we could actually order only the columns: #?? Totpop & Cutoff; dummyData = dummyData[order(dummyData$Cutoff), ] # Result cs = cumsum(dummyData$Totpop) # Only last entry: # - I do not have a nice one-liner, but this should do it: isLast = rev(! duplicated(rev(dummyData$Cutoff))) data.frame(Total = cs[isLast], ?? ?Cutoff = dummyData$Cutoff[isLast]) Sincerely, Leonard
On 10/15/2023 7:41 PM, Leonard Mada wrote:
Dear Jason, I do not think that the solution based on aggregate offered by GPT was correct. That quasi-solution only aggregates for every individual level. As I understand, you want the cumulative sum. The idea was proposed by Bert; you need only to sort first based on the cutoff (e.g. using an ordered factor). And then only extract the last value for each level. If Pct is unique, than you can skip this last step and use directly the cumsum (but on the sorted data set). Alternatives: see the solutions with loops or with sapply. Sincerely, Leonard