我有一个csv格式的SQL数据集,这是表/数据结构。
Order ID Items
O1 Beer
O1 Wine
O2 Beer
O2 Wine
O3 Beer
O4 Chips
我需要将R中的这个转换为以下格式
O1 Beer,Wine
O3 Beer,Chips
感谢任何帮助。
我尝试了以下内容:
# MOCK DAtA
o1 <- c("beer","Wine")
o2 <- c("beer","Wine")
o3 <- c("beer","Chips")
o4 <-c("Curd","chips")
o5 <-c("beer")
o6<-c("Wine")
o7 <-c("fruits")
o8<- c("wine","Cheese")
order <- list(o1,o2,o3,o4,o5,o6,o7,o8)
library(Arules)
dt <- as (order,"transactions")
输出:
str(order)
List of 8
$ : chr [1:2] "beer" "Wine"
$ : chr [1:2] "beer" "Wine"
$ : chr [1:2] "beer" "Chips"
$ : chr [1:2] "Curd" "chips"
$ : chr "beer"
$ : chr "Wine"
$ : chr "fruits"
$ : chr [1:2] "wine" "Cheese"
str(dt)
Formal class 'transactions' [package "arules"] with 4 slots
..@ transactionInfo:'data.frame': 0 obs. of 0 variables
..@ data :Formal class 'ngCMatrix' [package "Matrix"] with 5
注意:我无法在SQL中更改此内容,因为我有800K行。
答案 0 :(得分:0)
你可以做一件事。您发布的第一个表格内容包含订单ID和项目。您可以将它们插入到工作表中,在工作表中添加第三列,该列将存储记录的DENSE_RANK(),通过partition by子句按顺序保存组ID,按Item排序。加载此表后。您可以简单地使用此声明。 BSON
等等。但这有一个缺点,您必须知道任何订单中将出现的最大项目数。
如果您的数据库中的XML函数运行正常,您可以使用下面的子句(这将克服先前方法的缺点,但您需要确保此命令运行正常)
COALESCE(MAX((CASE rank_col WHEN 1 THEN items END)),'') || ',' || COALESCE(MAX((CASE rank_col WHEN 2 THEN items END)),'') || ',' ||
。希望这会有所帮助。
由于 Aritra