2016-01-04 3 views
-1

Я пытаюсь сделать простую сводную таблицу в R с использованием dplyr или reshape2 пакетов, так как мой набор данных слишком большой, а R выходит из памяти с sqldf. Два столбца моего набора данных, из которых я хочу сделать сводную таблицу, - это "Product" и "Cust_Id". Я хочу подсчитать количество клиентов на продукт. И это то, что я получил.R: Создание сводной таблицы с пакетом dplyr или reshape2

library(reshape2) 
mydata<-read.table("Book1.txt",header=TRUE,fill=TRUE) 
mydata.m<-melt(mydata,id=c("Product"),measured=c(Cust_Id)) 
mydata.d<-dcast(mydata.m,Product~variable,count) 

возвращает

Error in UseMethod("group_by_"): 
no applicable method for 'group_by_' applied to an object of class "c('integer','numeric')" 

Я также попытался dplyr с ниже код (не уверен насчет последнего шага, хотя, как я сделал это на другой ноутбук)

library(dplyr) 
mydata.df<-tbl_df(mydata) 
summarize(mydata.df,Product,Cust_Id=n()) 

меня нет сообщения об ошибке, но на выходе отсутствует много значений. Я очень ценю ваш вход. Заранее спасибо.

+1

Вы можете dput() часть ваших данных и поделиться им с примером результата, который вы ищете? – mtoto

ответ

0

Попробуйте это:

library(dplyr) 
mydata <- mydata %>% 
    group_by(Product) %>% 
    summarise(nCustomers = n()) 

В качестве альтернативы, если вы только хотите, чтобы рассчитывать уникальные клиентов, вы можете сделать:

library(dplyr) 
mydata <- mydata %>% 
    group_by(Product) %>% 
    summarise(nCustomers = n_distinct(Cust_Id)) 
0

Если это действительно является большой набор данных, то ваш лучший вариант в data.table package

require(data.table) 

mydata_data_table = data.table(mydata) 

number_customer = mydata_data_table[, .(number_customers = .N), by=Product] 
Смежные вопросы