R中具有相似名称的变量的累积和

R中具有相似名称的变量的累积和,r,dplyr,cumulative-sum,R,Dplyr,Cumulative Sum,我想我知道你想要什么。下面是一个data.table方法 df_test %>% group_by(YEAR,MONTH_NUM) %>% summarize(Sys_sum=sum(Sys_Indicator),lbl_Sum=sum(lbl_Indicator),Pk_Sum=sum(Pk_Indicator)) %>% arrange(MONTH_NUM,YEAR) %>% ungroup() %>% mutate(Sys_cum=c

我想我知道你想要什么。下面是一个data.table方法

df_test %>% 
 group_by(YEAR,MONTH_NUM) %>% 
 summarize(Sys_sum=sum(Sys_Indicator),lbl_Sum=sum(lbl_Indicator),Pk_Sum=sum(Pk_Indicator)) %>%
    arrange(MONTH_NUM,YEAR) %>%
    ungroup() %>% 
mutate(Sys_cum=cumsum(Sys_sum),Cum_lbl=cumsum(lbl_Sum),Pk_sum=cumsum(Pk_Sum))

我想我知道你想要什么。下面是一个data.table方法

df_test %>% 
 group_by(YEAR,MONTH_NUM) %>% 
 summarize(Sys_sum=sum(Sys_Indicator),lbl_Sum=sum(lbl_Indicator),Pk_Sum=sum(Pk_Indicator)) %>%
    arrange(MONTH_NUM,YEAR) %>%
    ungroup() %>% 
mutate(Sys_cum=cumsum(Sys_sum),Cum_lbl=cumsum(lbl_Sum),Pk_sum=cumsum(Pk_Sum))

您可以使用
dplyr
中的
\u at
变体将其应用于多列:

library(data.table)
setDT(df_test)[ ,sapply(names(df_test)[grep("Indicator",names(df_test))],paste0,"_cumsum") := lapply(.SD[,grep("Indicator",names(df_test))],cumsum)]
df_test
    MONTH_NUM YEAR Sys_Indicator lbl_Indicator Pk_Indicator Sys_Indicator_cumsum lbl_Indicator_cumsum Pk_Indicator_cumsum
 1:         7 2018             1             1            1                    1                    1                   1
 2:         7 2018             0             1            0                    1                    2                   1
 3:         8 2018             0             1            1                    1                    3                   2
 4:         8 2018             1             1            1                    2                    4                   3
 5:         8 2019             0             0            0                    2                    4                   3
 6:        10 2019             0             1            1                    2                    5                   4
 7:        11 2019             0             0            0                    2                    5                   4
 8:        12 2019             0             0            0                    2                    5                   4
 9:         1 2019             1             1            1                    3                    6                   5
10:         2 2018             1             1            1                    4                    7                   6
11:         3 2018             0             0            0                    4                    7                   6
12:         4 2019             1             1            1                    5                    8                   7
13:         4 2018             0             1            0                    5                    9                   7
14:         5 2018             1             1            0                    6                   10                   7
15:         5 2018             1             1            0                    7                   11                   7
16:         5 2018             1             1            0                    8                   12                   7
17:         5 2018             1             1            1                    9                   13                   8
18:        NA   NA             1             0            1                   10                   13                   9

库(dplyr)
df_测试%>%
安排(月、年)%>%
分组依据(年、月数)%>%
汇总在(变量(以('Indicator')结尾),总和%>%
解组()%>%
在(变量(以('Indicator')结尾)、列表(cs=~cumsum())中进行变异
#年月数系统指示器lbl指示器Pk指示器系统指示器lbl指示器Pk指示器
#                                                                     
# 1  2018         2             1             1            1                1                1               1
# 2  2018         3             0             0            0                1                1               1
# 3  2018         4             0             1            0                1                2               1
# 4  2018         5             4             4            1                5                6               2
# 5  2018         7             1             2            1                6                8               3
# 6  2018         8             1             2            2                7               10               5
# 7  2019         1             1             1            1                8               11               6
# 8  2019         4             1             1            1                9               12               7
# 9  2019         8             0             0            0                9               12               7
#10  2019        10             0             1            1                9               13               8
#11  2019        11             0             0            0                9               13               8
#12  2019        12             0             0            0                9               13               8
#13 NA 10 10 13 9

您可以使用
dplyr
中的
\u at
变体将其应用于多列:

library(data.table)
setDT(df_test)[ ,sapply(names(df_test)[grep("Indicator",names(df_test))],paste0,"_cumsum") := lapply(.SD[,grep("Indicator",names(df_test))],cumsum)]
df_test
    MONTH_NUM YEAR Sys_Indicator lbl_Indicator Pk_Indicator Sys_Indicator_cumsum lbl_Indicator_cumsum Pk_Indicator_cumsum
 1:         7 2018             1             1            1                    1                    1                   1
 2:         7 2018             0             1            0                    1                    2                   1
 3:         8 2018             0             1            1                    1                    3                   2
 4:         8 2018             1             1            1                    2                    4                   3
 5:         8 2019             0             0            0                    2                    4                   3
 6:        10 2019             0             1            1                    2                    5                   4
 7:        11 2019             0             0            0                    2                    5                   4
 8:        12 2019             0             0            0                    2                    5                   4
 9:         1 2019             1             1            1                    3                    6                   5
10:         2 2018             1             1            1                    4                    7                   6
11:         3 2018             0             0            0                    4                    7                   6
12:         4 2019             1             1            1                    5                    8                   7
13:         4 2018             0             1            0                    5                    9                   7
14:         5 2018             1             1            0                    6                   10                   7
15:         5 2018             1             1            0                    7                   11                   7
16:         5 2018             1             1            0                    8                   12                   7
17:         5 2018             1             1            1                    9                   13                   8
18:        NA   NA             1             0            1                   10                   13                   9

库(dplyr)
df_测试%>%
安排(月、年)%>%
分组依据(年、月数)%>%
汇总在(变量(以('Indicator')结尾),总和%>%
解组()%>%
在(变量(以('Indicator')结尾)、列表(cs=~cumsum())中进行变异
#年月数系统指示器lbl指示器Pk指示器系统指示器lbl指示器Pk指示器
#                                                                     
# 1  2018         2             1             1            1                1                1               1
# 2  2018         3             0             0            0                1                1               1
# 3  2018         4             0             1            0                1                2               1
# 4  2018         5             4             4            1                5                6               2
# 5  2018         7             1             2            1                6                8               3
# 6  2018         8             1             2            2                7               10               5
# 7  2019         1             1             1            1                8               11               6
# 8  2019         4             1             1            1                9               12               7
# 9  2019         8             0             0            0                9               12               7
#10  2019        10             0             1            1                9               13               8
#11  2019        11             0             0            0                9               13               8
#12  2019        12             0             0            0                9               13               8
#13 NA 10 10 13 9

这很有效,谢谢!一个简单的问题,我怎样才能将cumsum列添加到原始数据中,而不是使用这个摘要视图?我还想包括结尾带有“binary”的变量。我可以用('Indicator | binary')做一个简单的ends_吗?@Mel您可以使用
mutate_at
而不是
summary_at
来保持相同的行数,但它不会给出相同的
cumsum
值,因为现在我们有了更多的行。要包含多个这样的模式,我们可以使用
匹配
这样的
mutate_at(vars(matches('Indicator$binary$))、list(cs=~cumsum(.))
。那么,使用dplyr是否无法获得每行数据的总和?你所说的每行的
cumsum
是什么意思?这很有效,谢谢!一个简单的问题,我怎样才能将cumsum列添加到原始数据中,而不是使用这个摘要视图?我还想包括结尾带有“binary”的变量。我可以用('Indicator | binary')做一个简单的ends_吗?@Mel您可以使用
mutate_at
而不是
summary_at
来保持相同的行数,但它不会给出相同的
cumsum
值,因为现在我们有了更多的行。为了包含多个这样的模式,我们可以使用
匹配
这样的
mutate_at(vars(matches('Indicator$binary$))、list(cs=~cumsum(.))
。那么,是否无法使用dplyr获取每行数据的cumsum?你说的每行的
cumsum
是什么意思?谢谢伊恩!这也行得通,有没有办法把cumsum换成一年一个月的?谢谢你,伊恩!这也是可行的,有没有办法在一个月和一年中去掉cumsum?