微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对缺少观察的分组数据使用累积求和函数

如何解决如何对缺少观察的分组数据使用累积求和函数

我使用一个看起来像这样的数据框:

enter image description here

    DATUM               CP                SMER  TRH   MNOZSTVI  CENA POPLATKY   OBJEM UCET  KVARTAL   ROK AKTUALNI.MNOZSTVI
   <dttm>              <chr>             <chr> <chr>    <dbl> <dbl>    <dbl>   <dbl> <chr> <chr>   <dbl>             <dbl>
 1 2020-03-03 00:00:00 CEZ               K     BCPP        50 465.      91.3 -23240  CZK   Q1       2020                NA
 2 2020-03-04 00:00:00 CEZ               K     BCPP        50 467.      58.9 -13980  CZK   Q1       2020                NA
 3 2020-03-12 00:00:00 CEZ               P     BCPP        30 398       51.8  11940  CZK   Q1       2020                NA
 4 2020-03-25 00:00:00 KOMERCNI BANKA    K     BCPP        40 542       85.9 -21680  CZK   Q1       2020                NA
 5 2020-03-25 00:00:00 MONETA MONEY BANK K     BCPP       300  58.4     71.3 -17505  CZK   Q1       2020                NA
 6 2020-03-30 00:00:00 CEZ               K     BCPP        10 391       50    -3910  CZK   Q1       2020                NA
 7 2020-04-02 00:00:00 USD               K     NA        1000  25.8      0   -25778  CZK   Q2       2020                NA
 8 2020-04-03 00:00:00 USD               K     NA        3000  26.1      0   -78392  CZK   Q2       2020                NA
 9 2020-04-04 00:00:00 USD               K     NA        1000  26.4      0   -26363. CZK   Q2       2020                NA
10 2020-04-06 00:00:00 AVAST             K     BCPP       150 125.      75.8 -18810  CZK   Q2       2020                NA

我想将变量 MNOZSTVI 的累积和填充到按 CP 分组的变量 AKTUALNI.MNOZSTVI 中。所以向量 AKTUALNI.MNOZSTVI 应该是 c(50,100,130,40,300,140,​​1000,4000,5000,150,etc.)。

问题是 MNOZSTVI 的某些值丢失了,所以我不知道如何使用无法处理缺失值的函数 cumsun() + 我很难对分组数据执行它。

有人知道如何在 cumsum() 或其他函数的帮助下做到这一点吗? 谢谢。

解决方法

我们可以按'CP'分组,得到cumsum中'MNOZSTVI'的mutate

library(dplyr)
df1 <- df1 %>%
     group_by(CP) %>%
     mutate(AKTUALNI.MNOZSTVI  = cumsum(MNOZSTVI))

或者将 base Rave 一起使用

df1$AKTUALNI.MNOZSTVI <- with(df1,ave(MNOZSTVI,CP,FUN = cumsum))
,
library(dplyr)
df %>%
  group_by(CP) %>%
  mutate(AKTUALNI.MNOZSTVI  = cumsum(MNOZSTVI))

输出:

   DATUM      CP                         SMER  TRH   MNOZSTVI  CENA POPLATKY OBJEM UCET  KVARTAL ROK.AKTUALNI..MNOZSTVI AKTUALNI.MNOZSTVI
   <chr>      <chr>                      <chr> <chr>    <int> <dbl> <chr>    <chr> <chr> <chr>   <chr>                              <int>
 1 2020-03-03 00:00:00 CEZ               K     BCPP        50 465   91.3     NA    CZK   Q1      2020 NA                               50
 2 2020-03-04 00:00:00 CEZ               K     BCPP        50 467   58.9     NA    CZK   Q1      2020 NA                              100
 3 2020-03-12 00:00:00 CEZ               P     BCPP        30 398   51.8     11940 CZK   Q1      2020                                 130
 4 2020-03-25 00:00:00 KOMERCNI BANKA    K     BCPP        40 542   85.9     -     CZK   Q1      2020                                  40
 5 2020-03-25 00:00:00 MONETA MONEY BANK K     BCPP       300  58.4 71.3     -     CZK   Q1      2020                                 300
 6 2020-03-30 00:00:00 CEZ               K     BCPP        10 391   50       -     CZK   Q1      2020                                 140
 7 2020-04-02 00:00:00 USD               K     NA        1000  25.8 0        -     CZK   Q2      2020                                1000
 8 2020-04-03 00:00:00 USD               K     NA        3000  26.1 0        -     CZK   Q2      2020                                4000
 9 2020-04-04 00:00:00 USD               K     NA        1000  26.4 0        -     CZK   Q2      2020                                5000
10 2020-04-06 00:00:00 AVAST             K     BCPP       150 125   75. 8    -     CZK   Q2      2020                                 150

数据:

df <- tibble::tribble(
        ~DATUM,~CP,~SMER,~TRH,~MNOZSTVI,~CENA,~POPLATKY,~OBJEM,~UCET,~KVARTAL,~ROK.AKTUALNI..MNOZSTVI,"2020-03-03","00:00:00 CEZ","K","BCPP",50L,465,"91.3",NA,"CZK","Q1","2020 NA","2020-03-04",467,"58.9","2020-03-12","P",30L,398,"51.8","11940","2020","2020-03-25","00:00:00 KOMERCNI BANKA",40L,542,"85.9","-","00:00:00 MONETA MONEY BANK",300L,58.4,"71.3","2020-03-30",10L,391,"50","2020-04-02","00:00:00 USD",1000L,25.8,"0","Q2","2020-04-03",3000L,26.1,"2020-04-04",26.4,"2020-04-06","00:00:00 AVAST",150L,125,"75. 8","2020"
  )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。