2016-06-30 33 views
0

我有csv格式的数据。重新排列R中的数据用于购物篮分析

数据格式如下。随着收据号在一列产品在相应的列

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中重新排列相同的数据。

请帮忙

谢谢。

问候, Nithish

+0

请问您是否可以回复以下任何内容适合您? – mtoto

+0

Soto的回复很好 – Nithish

回答

0

基地R,

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

使用dplyr

df %>% 
    group_by(Receipt_no) %>% 
    summarise(new = paste(Product, collapse = ',')) 
+0

我有750000行数据。我用他建议的baseR函数。我们可以提前估计执行它的时间吗? – Nithish

+0

我不确定你能做到这一点。有一个称为'Sys.time'的函数,但它必须运行该脚本。但是,您将能够以'data.table'实现最快的速度。你可以很容易地将我的上面的代码翻译成'data.table' – Sotos

+0

感谢它的工作! – Nithish

0

使用基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" 

DATA

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))