2015-10-06 126 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) 
相关问题