split - список фреймов данных, полученных из split () в главном фрейме данных.
После разделения я применяю функцию к каждому фрейму данных в разделенный список.
Здесь функция:
getCustomer <- function(df, numberOfProducts = 3){
Gender <- unique(df$gender)
Segment <- unique(df$Segment)
Net_Discount <- sum(df$Discount * df$Sales)
Number_of_Discounts <- sum(df$Discount>0)
Customer.ID <- unique(df$Customer.ID)
Sales <- sum(df$Sales)
Profit <- sum(df$Profit)
lat <- mean(df$lat)
lon <- mean(df$lon)
productsData <- df %>% arrange(Order.Date) %>% top_n(n =numberOfProducts)
Products <- 0
Products_Category <- 0
Products_Order_Date <- 0
for (j in 1:numberOfProducts){
Products[j] <- productsData %>% select(Product.ID) %>% filter(row_number()==j)
Products_Category[j] <- productsData %>% select(Category) %>% filter(row_number()==j)
Products_Order_Date[j] <- productsData %>% select(Order.Date) %>% filte(row_number()==j)
names(Products)[j]<-paste("Product",j)
names(Products_Category)[j]<-paste("Category Product",j)
names(Products_Order_Date)[j]<-paste("Order Date Product",j)
}
output <- data.frame(Customer.ID, Gender,Segment, Net_Discount, Number_of_Discounts, Sales, Profit,
Products, Products_Category, Products_Order_Date, lon,lat)
return(output[1,])
}
Я получаю правильный ответ для любого элемента из split
getCustomer(splitted[[687]],2)
Я могу даже преуспеть с
customer <- list()
customer[[1]]<- getCustomer(splitted[[1]],2)
customer[[2]]<- getCustomer(splitted[[2]],2)
.
.
.
customer[[1576]]<- getCustomer(splitted[[1576]],2)
То есть я могу эффективно построить весь список customer , присваивая элемент за элементом.
Однако у меня, конечно, нет на это времени (1576 однострочных фреймов данных для назначения в список customer ), поэтому я пытаюсь:
customer <- list()
for (i in 1:length(splitted)){
customer[[i]]<-getCustomer(splitted[[i]],2)
}
После запуска этого последнего фрагмента кода я получаю:
Error in data.frame(Customer.ID, Gender, Segment, Net_Discount, Number_of_Discounts, : arguments imply differing number of rows: 0, 1
Я не могу понять эту ошибку, поскольку я могу строить элемент списка клиентов по элементам за один раз.
Буду признателен за вашу помощь.
Решение
Редактирование этого вопроса, чтобы вы знали, что проблема в том, что некоторые фреймы данных в split не имели строк.Поэтому я удалил их (только 3).
for (i in 1:length(splitted)){
l[i]<-nrow(splitted[[i]])
}
indices<- which(l==0)
splitted<-splitted[-indices]
Просто пришлось удалить 3 образца.На этот раз не было ошибок.Спасибо всем за ваше время.