【问题标题】:Rolling rowsum over existing data frame with NAs in r在 r 中使用 NA 在现有数据帧上滚动行和
【发布时间】:2020-11-23 10:55:16
【问题描述】:

给定数据框:

df1 <- data.frame(Company = c('A','B','C','D','E'),
                  `X1980` = c(NA, 5, 3, 8, 13),
                  `X1981` = c(NA, 12, NA, 11, 29),
                  `X1982` = c(33, NA, NA, 41, 42),
                  `X1983` = c(45, 47, 53, NA, 55))

我想创建一个新的数据框,其中每个值都替换为当前值和行的前一个值的总和。 NA 应保持原样。

这应该会产生以下数据框:

Company  1980  1981  1982  1983
   A      NA    NA    33    78
   B      5     17    NA    47
   C      3     NA    NA    53
   D      8     19    60    NA
   E      13    42    84    139

【问题讨论】:

    标签: r rolling-computation rowsum


    【解决方案1】:

    这是tidyverse 方法

    library(dplyr)
    library(tidyr)
    library(purrr)
    
    df1 %>% 
      pivot_longer(matches("\\d{4}$")) %>% 
      group_by(Company) %>% 
      mutate(value = accumulate(value, ~if (is.na(out <- .x + .y)) .y else out)) %>% 
      pivot_wider()
    

    输出

    # A tibble: 5 x 5
    # Groups:   Company [5]
      Company X1980 X1981 X1982 X1983
      <chr>   <dbl> <dbl> <dbl> <dbl>
    1 A          NA    NA    33    78
    2 B           5    17    NA    47
    3 C           3    NA    NA    53
    4 D           8    19    60    NA
    5 E          13    42    84   139
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 2021-06-06
      • 2013-04-02
      • 2018-12-11
      • 1970-01-01
      • 2018-03-23
      相关资源
      最近更新 更多