在R

时间:2018-12-28 16:50:47

标签: r dplyr

我正在处理一个名为 kpi 的表,我需要在该表中使用最小编号和最大来计算每个BoxID每周的(B1-B0)差异。每周每个BoxID -

我无法计算 First_b1,Last_b0和Diff

kpi <- kpi %>%
        mutate(weekNumber = week(dmy(Date))) %>% 
        group_by(SolboxID, weekNumber) %>%
        arrange(SolboxID)

**Date      No.   BoxID B0      B1      WkNo**
29.10.2018  61931   1   0       0       44
15.11.2018  115763  1   5.38    5.38    46
16.11.2018  119833  1   51.86   52.23   46
29.10.2018  60486   3   23.26   22.97   44
10.11.2018  99576   3   1336.53 1336.53 45
14.11.2018  112259  3   1.19    1.04    46
16.11.2018  117965  3   8.68    47.22   46
16.11.2018  118092  3   47.22   47.22   46
15.11.2018  115396  4   82.05   82.05   46

预期输出表-

Date        No.   BoxID B0      B1      WkNo   First_b1     Last_b0  Diff
29.10.2018  61931   1   0       0       44     0            0        0
15.11.2018  115763  1   5.38    5.38    46     52.23        5.38     46.85
16.11.2018  119833  1   51.86   52.23   46     52.23        5.38     46.85
29.10.2018  60486   3   23.26   22.97   44     22.97        23.26    -0.29
10.11.2018  99576   3   1336.53 1336.53 45     1336.53      1336.53  0
14.11.2018  112259  3   1.19    1.04    46     47.22        1.19     46.03
16.11.2018  117965  3   8.68    47.22   46     47.22        1.19     46.03
16.11.2018  118092  3   47.22   47.22   46     47.22        1.19     46.03
15.11.2018  115396  4   82.05   82.05   46     82.05       82.05     0

我需要一些帮助来计算另外3列。 预先谢谢你。

1 个答案:

答案 0 :(得分:1)

一个简单的管道似乎可以完成任务。看看是不是。

library(tidyverse)

kpi %>%
  group_by(BoxID, WkNo) %>%
  mutate(i = which.min(No.), 
         j = which.max(No.)) %>%
  mutate(First_B0 = B0[i],
         Last_B1 = B1[j],
         Diff = Last_B1 - First_B0) %>%
  select(-i, -j)
## A tibble: 9 x 9
## Groups:   BoxID, WkNo [6]
#  Date        No. BoxID      B0     B1  WkNo First_B0 Last_B1   Diff
#  <fct>     <int> <int>   <dbl>  <dbl> <int>    <dbl>   <dbl>  <dbl>
#1 29.10.2…  61931     1    0    0.        44     0        0     0   
#2 15.11.2… 115763     1    5.38 5.38e0    46     5.38    52.2  46.8 
#3 16.11.2… 119833     1   51.9  5.22e1    46     5.38    52.2  46.8 
#4 29.10.2…  60486     3   23.3  2.30e1    44    23.3     23.0  -0.29
#5 10.11.2…  99576     3 1337.   1.34e3    45  1337.    1337.    0   
#6 14.11.2… 112259     3    1.19 1.04e0    46     1.19    47.2  46.0 
#7 16.11.2… 117965     3    8.68 4.72e1    46     1.19    47.2  46.0 
#8 16.11.2… 118092     3   47.2  4.72e1    46     1.19    47.2  46.0 
#9 15.11.2… 115396     4   82.0  8.20e1    46    82.0     82.0   0   

数据。

kpi <- read.table(text = "
Date      No.   BoxID B0      B1      WkNo
29.10.2018  61931   1   0       0       44
15.11.2018  115763  1   5.38    5.38    46
16.11.2018  119833  1   51.86   52.23   46
29.10.2018  60486   3   23.26   22.97   44
10.11.2018  99576   3   1336.53 1336.53 45
14.11.2018  112259  3   1.19    1.04    46
16.11.2018  117965  3   8.68    47.22   46
16.11.2018  118092  3   47.22   47.22   46
15.11.2018  115396  4   82.05   82.05   46                  
", header = TRUE)