R 当前年度和上一年度从1月到最近可用月份的月数总和

R 当前年度和上一年度从1月到最近可用月份的月数总和,r,dataframe,dplyr,R,Dataframe,Dplyr,我正试图找到一种方法,为今年和上一年做一年。 例如,对于当前年度,我将从1月到最新可用的,然后是前一年的相同月份,在本例中为1月到7月。 如果最近可用的月份是2020年7月,那么我希望对2019年1月至7月和2020年1月至7月进行汇总 我已将脚本切回原处,并添加了dput(): 库(tidyverse) #获取表1的数据 数据1一旦数据整理好,它就是一个简单的过滤器来删除你不感兴趣的月份,分组按年和tc,以及汇总来获得每个tc值的总和 要获取动态月份列表,请使用months\u df中的uni

我正试图找到一种方法,为今年和上一年做一年。 例如,对于当前年度,我将从1月到最新可用的,然后是前一年的相同月份,在本例中为1月到7月。 如果最近可用的月份是2020年7月,那么我希望对2019年1月至7月和2020年1月至7月进行汇总

我已将脚本切回原处,并添加了dput():

库(tidyverse)
#获取表1的数据

数据1一旦数据整理好,它就是一个简单的
过滤器
来删除你不感兴趣的月份,
分组
tc
,以及
汇总
来获得每个
tc
值的
总和

要获取动态月份列表,请使用
months\u df
中的
unique
月份值,该值是
filter
ed,仅包含最近一年(
max
)。然后,我们可以将其用作我们的
过滤器
,用于最终的
摘要
df

library(tidyverse)

# tidy up the data
tidy_data <- data1 %>%
  separate(`DATE    TC  VALUE`, into = c("date", 'tc', 'value'), sep = '\t') %>%
  separate(date, into = c('year', 'month'), sep = '-') %>%
  mutate_at(.vars = c('year','month','value'), .funs = as.integer) 

# filter for latest year
months_df <- tidy_data %>%
  filter(year == max(tidy_data$year))

# use months_df to feed the filter
summary <- tidy_data %>%
  filter(month %in% unique(months_df$month)) %>%
  group_by(year, tc) %>%
  summarize(total = sum(value, na.rm = TRUE))
库(tidyverse)
#整理资料
数据百分比
单独(`DATE TC VALUE`,into=c(“DATE”、'TC','VALUE'),sep='\t')%>%
分开(日期,分为=c('年','月'),九月='-'))%>%
在(.vars=c('year','month','value'),.funs=as.integer)处进行变异
#最近一年的过滤器
月份_df%
过滤器(年==最大值(数据$year))
#使用df为过滤器馈电
汇总%
筛选器(月份%中的%唯一(月份_df$month))%>%
分组单位(年度,tc)%>%
汇总(总计=总计(数值,na.rm=真))
年度tc总计
1 2019 TC-1 18271577
2 2019 TC-2 14094089
3 2019 TC-3 9415440
4 2020 TC-1 4340588
5 2020 TC-2 3431912
6 2020 TC-3 2551697
编辑:更新为基于最近一年的动态月份列表。我相信还有一种更优雅的方式,但这应该是可行的。

d%
d <- IS YOUR DATA

d %>%
  group_by(date, tc) %>%
  dplyr::summarise(value = sum(value)) %>%
  mutate(month = month(date, label = T),
         year = year(date)) %>%
  ungroup %>%
  select(month, year, tc, value) %>%
  split(.$tc) %>%
  map( ~ spread(.x, year, value, fill = 0) %>%
         mutate(across(where(is.numeric), cumsum))) %>%
  plyr::ldply(rbind) %>%
  select(month, tc, `2018`, `2019`, `2020`) %>%
  filter(month == month(Sys.Date(), label = T))

   month   tc    2018     2019    2020
1  Oct   TC-1      NA 28451012 4340588
2  Oct   TC-2 7518039 21795738 3431912
3  Oct   TC-3 4930193 14477761 2551697
分组人(日期,tc)%>% dplyr::摘要(值=总和(值))%>% 变异(月=月(日期,标签=T), 年份=年份(日期))%>% 解组%>% 选择(月、年、tc、值)%>% 拆分(.$tc)%>% 地图(~spread(.x,年份,值,填充=0)%>% 变异(跨越(其中(是数值的),求和))%>% plyr::ldply(rbind)%>% 选择(月份、tc、`2018`、`2019`、`2020`)%>% 筛选器(月==月(Sys.Date(),label=T)) 2018-2019-2020月tc 10月1日TC-1 NA 28451012 4340588 10月2日TC-2 7518039 21795738 3431912 10月3日TC-3 4930193 14477761 2551697
你关心TC专栏吗?是的,我仍然需要TC专栏,不幸的是,这与我想要的非常接近,但由于每个月都会更新,我希望它能更新。例如,对于每个月的首次休假,我需要将筛选器(月%in%c(1:7))更新为筛选器(月%in%c(1:8))等等,非常感谢您的努力。我想我遇到了一个问题,因为我给出的dput()与app.r文件中的不完全相同。在app.r中,我使用了一个URL来获取CSV,在这个示例中,我将其削减了太多。
   year tc       total
  <int> <chr>    <int>
1  2019 TC-1  18271577
2  2019 TC-2  14094089
3  2019 TC-3   9415440
4  2020 TC-1   4340588
5  2020 TC-2   3431912
6  2020 TC-3   2551697
d <- IS YOUR DATA

d %>%
  group_by(date, tc) %>%
  dplyr::summarise(value = sum(value)) %>%
  mutate(month = month(date, label = T),
         year = year(date)) %>%
  ungroup %>%
  select(month, year, tc, value) %>%
  split(.$tc) %>%
  map( ~ spread(.x, year, value, fill = 0) %>%
         mutate(across(where(is.numeric), cumsum))) %>%
  plyr::ldply(rbind) %>%
  select(month, tc, `2018`, `2019`, `2020`) %>%
  filter(month == month(Sys.Date(), label = T))

   month   tc    2018     2019    2020
1  Oct   TC-1      NA 28451012 4340588
2  Oct   TC-2 7518039 21795738 3431912
3  Oct   TC-3 4930193 14477761 2551697