按R中的多个变量对数据帧进行分组

时间:2015-10-06 18:08:48

标签: r split dplyr sample

我有一个包含5713行和7列的数据框。许多行都是重复的。我需要按“性别”和“大小”创建5个组,同时确保“项目”列不包含重复项,“类型”列仅包含最多1个“羊毛”。我尝试过sample,split,group_by,sample_n,但似乎无法弄清楚如何包含所有变量。

以下是数据框的示例:

                  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  

我一直在努力解决这个问题。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

Config.X函数可以直接避免组内item的重复:

distinct

确保不超过一个"羊毛"有点棘手,但可以使用library(dplyr) df %>% group_by(gender, size) %>% distinct(item) filter。这将删除除第一个羊毛之外的所有羊毛(每组内)。

cumsum

然后你可以按照原来的尝试做 filter(!(type == "Fleece" & cumsum(type == "Fleece") > 1))

sample_n

总的来说,您的代码是:

  sample_n(5)