2016-06-30 7 views
0

データはcsv形式で入手できます。市場バスケット分析のためにRでデータを並べ替える

データ形式は次のとおりです。対応する列

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

内の1つの列内の番号領収書と製品で、私は、カンマで区切られた1行の領収書番号と製品名である

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

としてそれらを再配置します。データが大きいので、Rで同じデータを並べ替える必要があります。

親切

感謝を助けます。

よろしく、 Nithish基地R使用

+0

以下のいずれかが返答しますか? – mtoto

+0

Sotoさんの返信がよかった – Nithish

答えて

0

基地R、

dplyrを使用
aggregate(Product ~ Receipt_no, df, paste, collapse = ',') 

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

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)) 
関連する問題