У меня есть 2 кадра данных, каждый из которых представляет ежедневные показатели продаж разных магазинов (df1) и один, представляющий, когда каждый магазин был проверен (df2). Мне нужно создать новый блок данных, отображающий информацию о продажах с каждого сайта за 1 неделю до каждого аудита (т. Е. Информацию в df2). Некоторые примеры данных, во-первых, для ежедневных показателей продаж из разных магазинов через определенный период:Использование lapply для вывода значений между диапазонами дат в разных уровнях фактора
Dates <- as.data.frame(seq(as.Date("2015/12/30"), as.Date("2016/4/7"),"day"))
Sales <- as.data.frame(matrix(sample(0:50, 30*10, replace=TRUE), ncol=3))
df1 <- cbind(Dates,Sales)
colnames(df1) <- c("Dates","Site.A","Site.B","Site.C")
И на дату каждого аудита через различные магазины:
Store<- c("Store.A","Store.A","Store.B","Store.C","Store.C")
Audit_Dates <- as.data.frame(as.POSIXct(c("2016/1/4","2016/3/1","2016/2/1","2016/2/1","2016/3/1")))
df2 <- as.data.frame(cbind(Store,Audit_Dates))
colnames(df2) <- c("Store","Audit_Dates")
Следует отметить, что там будет нечетное количество дат в каждом выпуске (т. е. может быть не до полной информации за неделю до проведения некоторых проверок магазина). Ранее я задал вопрос, касающийся аналогичной проблемы Creating a dataframe from an lapply function with different numbers of rows. Ниже приведен ответ от этого, которая будет работать для примера, если бы я должен был рассмотреть информацию только 1 магазин:
library(lubridate)
##Data input
Store.A_Dates <- as.data.frame(seq(as.Date("2015/12/30"), as.Date("2016/4/7"),"day"))
Store.A_Sales <- as.data.frame(matrix(sample(0:50, 10*10, replace=TRUE), ncol=1))
Store.A_df1 <- cbind(Store.A_Dates,Store.A_Sales)
colnames(Store.A_df1) <- c("Store.A_Dates","Store.A_Sales")
Store.A_df2 <- as.Date(c("2016/1/3","2016/3/1"))
##Output
Store.A_output<- lapply(Store.A_df2, function(x) {Store.A_df1[difftime(Store.A_df1[,1], x - days(7)) >= 0 & difftime(Store.A_df1[,1], x) <= 0, ]})
n1 <- max(sapply(Store.A_output, nrow))
output <- data.frame(lapply(Store.A_output, function(x) x[seq_len(n1),]))
Но я не знаю, как я хотел бы получить это для нескольких сайтов.
Да, я только что заметил, что я добавил реферирование части, но забудьте добавить строку, которая добавляет «проверенные» переменную в lapply вызова. Теперь это исправлено, поэтому все должно работать. – jakub