Вы можете использовать пакет plyr
для этого типа проблемы:
library(plyr)
dat = data.frame(
customers = c("cust_a","cust_b","cust_a","cust_b"),
products = c("prod_a","prod_b","prod_a","prod_b"),
dates = c("2011/10/25","2011/09/14","2011/03/12","2011/05/06"),
prices =c("10","12","15","18")
)
Сначала преобразуйте столбец dates
в класс Date
, используя as.Date
. Это позволяет легко работать, в том числе найти максимум:
dat$dates <- as.Date(dat$dates)
Далее используйте ddply
. Это разбивает data.frame
на части, применяет функцию к каждому фрагменту и затем возвращает data.frame
после объединения всех частей. Функция, которую вы хотите применить к каждому чанку, это subset
, в частности это подмножество, где dates==max(dates)
:
ddply(dat, .(customers, products), subset, dates==max(dates))
customers products dates prices
1 cust_a prod_a 2011-10-25 10
2 cust_b prod_b 2011-09-14 12