У меня есть фрейм данных с идентификатором столбца, категорией, меткой времени, количеством, ценой. Я хочу сгруппировать данные по идентификатору, категории, а затем получить последние 3 значения количества, цены, а затем развернуть таблицу.
library(dplyr)
dummy <- data.frame("ID" = c(1,1,2,2,3),
"category"=c("A","A", "B", "A", "C"),
"timestamp"=as.Date(c("2020-04-05", "2020-04-10", "2020-03-01", "2020-01-01", "2020-01-10")),
"Quantity"=c(1,5,6,7,4),
"price"=c(10.2, 45.6, 70.3, 23.4, 10))
> dummy
ID category timestamp Quantity price
1 1 A 2020-04-05 1 10.2
2 1 A 2020-04-10 5 45.6
3 2 B 2020-03-01 6 70.3
4 2 A 2020-01-01 7 23.4
5 3 C 2020-01-10 4 10.0
Я хочу выбрать последние 3 строки каждой категории клиентов. если только одна или 2 строки proe snet, тогда заполните отсутствующие строки 0.
dummy2 <- data.frame("ID" = c(1,2,2,3),"category" = c("A","B", "A", "C"),
"Quantity1" = c(0,0,0,0),"Quantity2" = c(1,0,0,0),"Quantity3" = c(5,6,7,4),
"price1" = c(0,0,0,0),"price2" = c(10.2,0,0,0),"price3" = c(45.6, 70.3, 23.4, 10.0))
> dummy2
ID category Quantity1 Quantity2 Quantity3 price1 price2 price3
1 1 A 0 1 5 0 10.2 45.6
2 2 B 0 0 6 0 0.0 70.3
3 2 A 0 0 7 0 0.0 23.4
4 3 C 0 0 4 0 0.0 10.0
здесь количество1, количество2, количество3 представляет (последние-2, последние-1, последние) значения строк для каждой категории IDx . Я попробовал dummy %>% group_by(ID, category) %>% dplyr::top_n(-3, wt = timestamp) %>% select(Quantity, price)
, после этого не знаю, что делать. предложите решение