2016-02-07 128 views
0

我有一個問題,我發現自己沒有及時解決問題。真的很感謝任何幫助,因爲我認爲它對於這裏的一些專業人士來說只需幾行代碼。與R的數據處理

我的數據包含了超過2 MIO。交易行。我想對數據做一些關聯規則。

I'm只是感興趣,因爲他們的產品(P_ID) 「PANDORA」 參與和交易(T_ID)那裏,我認識的客戶(C_ID)。我舉了一個例子:

> T_ID <- c(10,10,10,11,12,13,13) 
> P_ID <- c("PANDORA", "Others", "Pan","PANDORA","Ham", "PANDORA","Ham") 
> c_ID <- c(1,1,1,2,-1,4,4) 
> basket <- data.frame(T_ID,P_ID,c_ID) 
> basket 
T_ID P_ID c_ID 
1 10 PANDORA 1 
2 10 Others 1 
3 10  Pan 1 
4 11 PANDORA 2 
5 12  Ham -1 
6 13 PANDORA 4 
7 13  Ham 4 

事務10包含產品「Pandora」,因此所有3行應保留在數據集中。雖然交易12沒有附加客戶,但需要將其移除。

林掙扎的最上部分如何保持這是有關含有「PANDORA」同一個事務ID交易行,但有存儲其他產品。

任何幫助非常感謝,

最好的問候, 基督教

回答

0

是否每筆交易都有ONL Ÿ一個客戶ID?我假設如此。

第一步是除去沒有客戶ID的行。

cleanbasket = basket[bucket$c_ID != -1,] 

接下來,我們要確定哪些交易包含PANDORA。

transactions = unique(basket$T_ID[basket$P_ID == "PANDORA"]) 

然後讓所有的行,這些交易

cleanbasket = cleanbasket[cleanbasket$T_ID %in% transactions,] 
+0

解決得很好。謝了哥們! – Christian

2

也許這會有所幫助:

keep_IDs <- basket$T_ID[with(basket, P_ID=="PANDORA" & c_ID!=-1)] 
basket[basket$T_ID %in% keep_IDs,] 
# T_ID P_ID c_ID 
#1 10 PANDORA 1 
#2 10 Others 1 
#3 10  Pan 1 
#4 11 PANDORA 2 
#6 13 PANDORA 4 
#7 13  Ham 4 

數據

basket <- structure(list(T_ID = c(10L, 10L, 10L, 11L, 12L, 13L, 13L, 14L, 14L), 
P_ID = structure(c(6L, 4L, 5L, 6L, 1L, 6L, 1L, 3L, 2L), 
.Label = c("Ham","Honey", "Nugget", "Others", "Pan", "PANDORA"), class = "factor"), 
c_ID = c(1L, 1L, 1L, 2L, -1L, 4L, 4L, 5L, 5L)), 
.Names = c("T_ID", "P_ID", "c_ID"), class = "data.frame", 
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9")) 
+0

感謝您的快速答覆。我確實擴展了我的例子,並添加了另一個交易(14),其中包含「Nugget」和「Honey」,並由客戶5購買。它現在還顯示了交易14.因此它似乎適用於該示例,但不是全部。 – Christian

+0

@Christian我認爲你錯了。我添加了您提到的事務,並且它不顯示在輸出中。請仔細檢查我在編輯中發佈的數據。 – RHertel

+0

您可能忘記將輸出存儲在變量中,如'basket2 < - basket [basket $ T_ID%in%keep_IDs,]'。我的答案中的操作保持原來的數據框「basket」不變。他們只對內容進行過濾以產生期望的輸出。 – RHertel