R语言·如何实现分组&有序累计求和

2021-01-12 11:24:32 浏览数 (3)

元旦快乐

Rstudio快捷键普及

符号

快捷键(window)

赋值符号“<-”

Alt -

管道符号“%>% ”

Ctrl Shift m

多行注释,例如:# library(tidyverse)# getwd()# setwd("C:/Users/Desktop")

选中需要注释的行,键盘Ctrl Shift c取消注释,重复Ctrl Shift c

1、问题描述

问题:依据group分组,按照dat(日期)升序对num列数据累计求和并生成cum_num列

实现过程

代码语言:javascript复制
# 生成演示数据集
set.seed(1)
da <- sample(1:12,12,replace = FALSE)
dat <- lubridate::as_date(da)
group <- rep(letters[1:3],each=4)
num <- 1:12
dft <- tibble::tibble(dat,group,num) # 演示数据集

library(dplyr)
dft_c <- dft %>% 
  group_by(group) %>% 
  arrange(group,dat) %>% 
  mutate(cum_num = cumsum(num)) %>% 
  ungroup()

实现结果

代码语言:javascript复制
# 实现效果(数字)
> dft_c
# A tibble: 12 x 4
   dat        group   num cum_num
   <date>     <chr> <int>   <int>
 1 1970-01-02 a         4       4
 2 1970-01-05 a         2       6
 3 1970-01-08 a         3       9
 4 1970-01-10 a         1      10
 5 1970-01-03 b         5       5
 6 1970-01-04 b         7      12
 7 1970-01-06 b         6      18
 8 1970-01-09 b         8      26
 9 1970-01-07 c         9       9
10 1970-01-11 c        12      21
11 1970-01-12 c        10      31
12 1970-01-13 c        11      42

# 结果绘图
library(ggplot2)
ggplot(dft_c,mapping = aes(x=dat,y=cum_num)) 
  geom_line(aes(color=as.factor(group))) 
  geom_point(aes(color=as.factor(group)))  
  geom_text(aes(label=paste0(num,";",cum_num))) 
  labs(title="如何实现分组&有序累计求和")

0 人点赞