【问题标题】:How to fill a data frame with cumulative sum with missing values in another variable如何用另一个变量中缺失值的累积和填充数据框
【发布时间】:2022-07-05 23:35:13
【问题描述】:

假设您有以下数据框

x<- c(3, 5, 9, 12, 14)
y<- c(0.2, 0.4, 0.7, 1.4, 1.8)
df<- data.frame(x, y)
df

几个月前我问过,如何用剩余的数字填充“x”,而这些数字在“y”中取零值。 答案是:

df <- tidyr::complete(df, x = 0:16, fill = list(y = 0))
cbind(df$x, df$y)

现在,我想按以下方式填写数字,但自动填写,我不知道是否可以。
如何自动获取“y1”

提前致谢。

df$y1<- c(0,0,0, 0.2,0.2, 0.4,0.4,0.4,0.4, 0.7,0.7,0.7, 1.4,1.4, 1.8,1.8,1.8)
cbind(df$x, df$y1)

【问题讨论】:

    标签: r dataframe tidyr


    【解决方案1】:

    不要在complete 中指定fill,而是保持原样,以便默认情况下由NA 填充,然后使用tidyr 中的fill 将NA 元素更新为之前的非NA

    library(dplyr)
    library(tidyr)
    tidyr::complete(df, x = 0:16) %>%
       fill(y, .direction = "down") %>% 
       mutate(y = replace(y, is.na(y), 0))
    

    -输出

    # A tibble: 17 × 2
           x     y
       <dbl> <dbl>
     1     0   0  
     2     1   0  
     3     2   0  
     4     3   0.2
     5     4   0.2
     6     5   0.4
     7     6   0.4
     8     7   0.4
     9     8   0.4
    10     9   0.7
    11    10   0.7
    12    11   0.7
    13    12   1.4
    14    13   1.4
    15    14   1.8
    16    15   1.8
    17    16   1.8
    

    【讨论】:

      【解决方案2】:
      df %>%
       complete(x=0:16) %>%
       fill(y) %>%
       replace_na(list(y=0))
      
      # A tibble: 17 x 2
             x     y
         <dbl> <dbl>
       1     0   0  
       2     1   0  
       3     2   0  
       4     3   0.2
       5     4   0.2
       6     5   0.4
       7     6   0.4
       8     7   0.4
       9     8   0.4
      10     9   0.7
      11    10   0.7
      12    11   0.7
      13    12   1.4
      14    13   1.4
      15    14   1.8
      16    15   1.8
      17    16   1.8
      

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 2018-07-25
        • 1970-01-01
        • 2022-01-17
        相关资源
        最近更新 更多