Скажем, у меня есть набор данных.
structure(list(SKU = c(13284L, 13284L, 13284L, 13284L, 13284L,
13284L, 13284L, 13284L, 13284L, 13284L, 13284L), stuff = c(4565,
0, 0, 0, 567.0065222, 0, -1, 73.82897425, -1, 567.0065222, 614.2570658
), action = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), acnumber = c(329L,
329L, 329L, 329L, 329L, 329L, 329L, 329L, 329L, 329L, 329L),
year = c(2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L)), .Names = c("SKU", "stuff",
"action", "acnumber", "year"), class = "data.frame", row.names = c(NA,
-11L))
Столбец действия имеет только два значения 0 и 1. Как мы видим, есть 1 наблюдение за вещами из 1 категории и 10 наблюдений за вещами из нулевой категории.
1. Мне нужно вычислить медиану трех последних наблюдений, но все, что меньше или равно нулю в столбце Stuff, не требуется.Так что я должен работать с тремя последними акциями.Кол-во вещей по категории 0 действий.
567,0065222
73,8289742
567,0065222
the median =567,0065
Теперь я должен взять одно значение категории 1 действия и вычесть из него вычисленную медиану
614,2570658-567,0065222 = 47,2505436
Я делаю это
AwesomeData %>% {.[.$stuff>0,]} %>% {.[.$action==0,]} %>% tail(3) %>% {median(.$stuff)} -> OURMEDIANA
AwesomeData %>% {.[.$action==1,]} %>% {.$stuff}-OURMEDIANA -> WHATWENEED
a=cbind(AwesomeData,WHATWENEED)
но что, если у меня есть две группы, подобные
structure(list(SKU = c(13284L, 13284L, 13284L, 13284L, 13284L,
13284L, 13284L, 13284L, 13284L, 13284L, 13284L, 13285L, 13285L,
13285L, 13285L, 13285L, 13285L, 13285L, 13285L, 13285L, 13285L,
13285L), stuff = c(4565, 0, 0, 0, 567.00652, 0, -1, 73.82897,
-1, 567.00652, 614.25707, 4565, 0, 0, 0, 567.00652, 0, -1, 73.82897,
-1, 567.00652, 614.25707), action = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L
), acnumber = c(329L, 329L, 329L, 329L, 329L, 329L, 329L, 329L,
329L, 329L, 329L, 330L, 330L, 330L, 330L, 330L, 330L, 330L, 330L,
330L, 330L, 330L), year = c(2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L)), .Names = c("SKU",
"stuff", "action", "acnumber", "year"), class = "data.frame", row.names = c(NA,
-22L))
Теперь у нас есть новая группа
SKU +acnumber+year
13285+330+2017
какчтобы использовать эту строку для всех групп в наборе данных
в качестве вывода, я вижу
SKU stuff action acnumber year new
<int> <dbl> <int> <int> <int> <dbl>
1 13284 4565 0 329 2018 3998
2 13284 0 0 329 2018 - 567
3 13284 0 0 329 2018 - 567
4 13284 0 0 329 2018 - 567
5 13284 567 0 329 2018 0
6 13284 0 0 329 2018 - 567
7 13284 - 1.00 0 329 2018 - 568
8 13284 73.8 0 329 2018 - 493
9 13284 - 1.00 0 329 2018 - 568
10 13284 567 0 329 2018 0
, но я должен видеть
SKU acnumber year result
13284 329 2018 47,25055
13285 330 2017 47,25055 614,25707-median of three last obs. Of zero (567,00652)