У меня большой фрейм данных (100K строк, 19 столбцов). Мне нужно подсчитать количество дел в каждом месяце, которые содержат каждую возможную комбинацию из 5 предметов.
Следующий код работает для небольшого набора данных, но с моим полным набором данных это занимает слишком много времени. Из моих поисков я подозреваю, что предварительное выделение фрейма данных является ключом, но я не могу понять, как это сделать.
library(dplyr)
Case<-c(1,1,1,2,2,3,4,5,5,6,6,6,7,8,8,8,9,9,9)
Month<- c("Jan","Jan","Jan","Mar","Mar","Sep","Sep","Nov","Nov","Dec","Dec","Dec","Apr","Dec","Dec","Dec","Dec","Dec","Dec")
Fruits<-c("Apple","Orange","Grape","Grape","Orange","Apple","Apple","Orange","Grape","Apple","Orange","Grape","Grape","Apple","Orange","Grape","Apple","Orange","Grape")
df<-data.frame(Case,Month,Fruits)
Patterns <- with(df, do.call(rbind, lapply(unique(Case), function(x){
y <- subset(df, Case == x )
Date<-as.character(y$Month[1])
Fruits <- paste(unique(y$Fruits[order(y$Fruits)]), collapse = ' / ')
as.data.frame(unique (cbind(Case = y$Case, Date, Fruits)))
})))
Total<-Patterns %>%
group_by(Date,Fruits) %>%
tally()
Полученные результаты приемлемы, но процесс занимает слишком много времени, и с большим набором данных у меня заканчивается память.