R 当前年度和上一年度从1月到最近可用月份的月数总和
我正试图找到一种方法,为今年和上一年做一年。 例如,对于当前年度,我将从1月到最新可用的,然后是前一年的相同月份,在本例中为1月到7月。 如果最近可用的月份是2020年7月,那么我希望对2019年1月至7月和2020年1月至7月进行汇总 我已将脚本切回原处,并添加了dput():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
库(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