2015-10-06 129 views
0

我有一個包含5713行和7列的數據幀。許多行都是重複的。我需要通過「性別」和「大小」來創建5個組,同時確保「項目」列不包含重複項,而「類型」列僅包含最多1個「抓絨」。我曾嘗試過sample,split,group_by,sample_n,但似乎無法弄清楚如何包含所有變量。R中的多個變量對數據組進行分組

這裏是數據幀的一個示例:

    SKU   UPC type rating size gender item 
1 M3MEN-SU15-BLU-XXL 628012010215 Tee  5 XXL  M M3MEN 
2 M3MEN-SU15-GRY-XXL 628012010314 Tee  5 XXL  M M3MEN 
3 M3MEN-SU15-GRY-XL 628012010316 Tank  5 XL  M M3MEN 
4   MAMA-CHA-S *MAMA-CHA-S* Tank  5 S  M MAMA 
5   MAMA-CHA-S *MAMA-CHA-S* Tee  5 S  M MAMA 
6   MBAN-CHA-M *MBAN-CHA-M* Fleece  3 M  W MBAN 
7   WAZA-CHA-L *WAZA-CHA-L* Fleece  3 L  M WAZA 
8   MBAN-CHA-M *MBAN-CHA-M* Fleece  3 M  W MBAN 
9   MBAN-CHA-M *MBAN-CHA-M* Fleece  3 M  M MBAN 
10   MCON-CHA-M *MCON-CHA-M* Fleece  3 M  M MCON 

理想我想創建對於每個組的5

例如創建一個唯一的ID的新柱:

    SKU   UPC type rating size gender item id 
1 M3MEN-SU15-BLU-S 628012010215 Tee  5 S  M M3MEN 1 
2   MAMA-CHA-S *MAMA-CHA-S* Tank  5 S  M MAMA 1 
3   MBAN-CHA-S *MBAN-CHA-S* Tank  3 S  M MBAN 1 
4   MAZA-CHA-S *MAZA-CHA-S* Tee  3 S  M MAZA 1 
5   MCON-CHA-S *MCON-CHA-S* Fleece  3 S  M MCON 1 
6 W3MEN-SU15-BLU-M 428012010215 Tee  2 M  W W3WOM 2 
7   WAMA-CHA-M *WAMA-CHA-M* Tank  4 M  W MAMA 2 
8   WBAN-CHA-M *WBAN-CHA-M* Tank  5 M  W MBAN 2 
9   WAZA-CHA-M *WAZA-CHA-M* Tee  1 M  W MAZA 2 
10   WCON-CHA-M *WCON-CHA-M* Fleece  3 M  W MCON 2 

我一直在爲此奮鬥一段時間。任何幫助將不勝感激!

+2

能告訴你,你已經嘗試了代碼?這將有助於跨越你想要做的事。用'dput(head(yourdata,20))'包括一個可重複的例子'也會有所幫助。 –

+0

我試過創建組的樣本(按性別和大小),但它不能解決含有超過1個羊毛實例的獨特「項目」或「類型」問題。 'df <- df %>%group_by(gender,size)%> sample_n(size = 5)' –

+1

當你說>需要通過「gender」和「size」來創建5個羣組嗎?只是說我需要創建同性別和大小的組,例如男性,小的第一。然後顯示男性,中等。然後顯示男性,大。然後顯示女性,小等等。只是想知道5是否是某種附加要求,或者只是您注意到,就您所知,每個性別+尺寸組中只能有5個變體。 – user454038

回答

0

避免的一個組內的item重複與distinct功能直接:

library(dplyr) 
df %>% 
    group_by(gender, size) %>% 
    distinct(item) 

確保有不超過一個「羊毛」是有點麻煩,但可行與filtercumsum。這會除去第一個Fleece(每個組內)。

filter(!(type == "Fleece" & cumsum(type == "Fleece") > 1)) 

然後,你可以做sample_n爲您最初嘗試:

sample_n(5) 

總之,你的代碼是:

df <- df %>% 
    group_by(gender, size) %>% 
    distinct(item) %>% 
    filter(cumsum(type == "Fleece") <= 1) %>% 
    sample_n(5) 
相關問題