【问题标题】:Adding value 0 into data using dplyr in R在 R 中使用 dplyr 将值 0 添加到数据中
【发布时间】:2021-07-15 19:02:23
【问题描述】:

这是我的数据

## Data
datex <- c(rep("2021-01-18", 61), rep("2021-01-19", 125))
hourx <- c(0,1,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,16,10,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,11,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,15,15,15,15,16,16,16,16)
transaction <- c(1,6,2,5,1,2,1,9,6,12,5,25,14,6,22,9,10,14,15,12,22,12,12,14,9,11,3,3,4,0,1,4,3,1,2,3,3,5,7,5,5,6,9,16,8,13,10,20,15,18,10,19,15,5,13,12,10,12,26,14,0,4,0,0,0,2,0,0,2,0,4,0,6,8,0,2,3,0,2,0,1,0,1,0,2,0,0,2,1,1,0,0,3,0,1,0,3,0,0,6,5,2,0,8,0,0,12,11,0,2,0,11,0,0,14,21,0,0,13,7,0,17,0,0,18,0,7,0,4,4,0,0,7,12,0,13,0,0,13,6,9,0,0,0,16,0,0,16,0,14,0,0,9,0,11,8,0,8,0,0,8,0,10,5,0,15,0,0,3,0,0,8,8,0,0,6,5,0,8,0,0,5,1,0,0,3)
mydata <- data.frame(datex, hourx, seller, product, detail, status, channel, transaction)

我的任务是将 0 添加到组合中。 这就是我的意思。这是一个示例,我想从中找到更改点

从结果中,我们可以看到 datex "2021-01-18" 和 "2021-01-19" 从 17 到 23 错过了 hourx,所以我们需要在 hourx 17-23 中添加 0。我像这样手动操作

如何使用 dplyr 为所有组合自动将 0 添加到缺少的“hourx”中? 非常感谢。

【问题讨论】:

    标签: r dataframe dplyr data.table


    【解决方案1】:

    这样做。

    library(dplyr)
    library(tidyr)
    
    mydata %>% group_by(datex, seller, product, detail, status, channel) %>%
      complete(hourx = seq(0, 23, 1)) %>%
      mutate(transaction = ifelse(is.na(transaction), 0, transaction))
    
    # A tibble: 408 x 8
    # Groups:   datex, seller, product, detail, status, channel [17]
       datex      seller      product  detail status channel hourx transaction
       <chr>      <chr>       <chr>    <chr>  <chr>  <chr>   <dbl>       <dbl>
     1 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          0           0
     2 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          1           0
     3 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          2           0
     4 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          3           5
     5 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          4           2
     6 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          5           9
     7 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          6          12
     8 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          7          25
     9 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          8          22
    10 2021-01-18 dombsdpapp1 00021459 E99    FI04   f3          9          10
    # ... with 398 more rows
    

    对 cp_data 的相同操作将得到完全期望的结果

    cp_data %>% group_by(datex, seller, product, detail, status, channel) %>%
      complete(hourx = seq(0, 23, 1)) %>%
      mutate(transaction = ifelse(is.na(transaction), 0, transaction))
    
    # A tibble: 48 x 8
    # Groups:   datex, seller, product, detail, status, channel [2]
       datex      seller      product  detail status channel hourx transaction
       <chr>      <chr>       <chr>    <chr>  <chr>  <chr>   <dbl>       <dbl>
     1 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          0           1
     2 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          1           6
     3 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          2           2
     4 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          3           1
     5 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          4           1
     6 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          5           6
     7 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          6           5
     8 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          7          14
     9 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          8           6
    10 2021-01-18 dombsdpapp1 00021460 E99    FI04   f2          9           9
    # ... with 38 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2014-03-16
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多