Преобразование данных в R для анализа потребительской корзины

У меня есть данные в формате csv.

Формат данных следующий. С номерами квитанций в одном столбце и продуктом в соответствующем столбце.

Receipt_no Product
A1  Apple
A1  Banana
A1  Orange
A2  Pineapple
A2  Jackfruit
A3  Cola
A3  Tea

Я хочу переставить их как

A1 ,  Apple, Banana, Orange
A2 , Pineapple, Jackfruit
A3 , Cola, Tea

То есть номера чеков и названия товаров в одну строку через запятую. Поскольку данные большие, я хочу переставить их в R.

Пожалуйста, помогите

Спасибо.

С уважением, Нитиш


person Nithish    schedule 30.06.2016    source источник
comment
Не могли бы вы ответить, работает ли что-либо из нижеперечисленного для вас?   -  person mtoto    schedule 01.07.2016
comment
Ответ Сото был хорошим   -  person Nithish    schedule 02.07.2016


Ответы (2)


База Р,

aggregate(Product ~ Receipt_no, df, paste, collapse = ',')

Используя dplyr,

df %>% 
  group_by(Receipt_no) %>% 
  summarise(new = paste(Product, collapse = ','))
person Sotos    schedule 30.06.2016
comment
У меня есть 750000 строк данных. Я использовал предложенную вами функцию baseR. Можем ли мы заранее оценить время для его выполнения? - person Nithish; 01.07.2016
comment
Я не уверен, что вы можете это сделать. Существует функция с именем Sys.time, но ей нужно будет запустить скрипт. Однако самое быстрое, чего вы сможете добиться, это data.table. Вы можете легко перевести мой приведенный выше код на data.table - person Sotos; 01.07.2016

Используя базу R:

u <- as.vector(unique(df$Receipt_no))
as.list(sapply(u, function(x) paste0(x, ", ", paste0(subset(df$Product, df$Receipt_no==x), collapse = ", "))))

# $A1
# [1] "A1, Apple, Banana, Orange"

# $A2
# [1] "A2, Pineapple, Jackfruit"

# $A3
# [1] "A3, Cola, Tea"

ДАННЫЕ

df <- structure(list(Receipt_no = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 
3L), .Label = c("A1", "A2", "A3"), class = "factor"), Product = structure(c(1L, 
2L, 5L, 6L, 4L, 3L, 7L), .Label = c("Apple", "Banana", "Cola", 
"Jackfruit", "Orange", "Pineapple", "Tea"), class = "factor")), .Names = c("Receipt_no", 
"Product"), class = "data.frame", row.names = c(NA, -7L))
person 989    schedule 30.06.2016