簡體   English   中英

通過R中的多個變量對數據框進行分組

[英]Group dataframe by multiple variables in R

我有一個包含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  

我已經為此苦了一段時間了。 任何幫助將不勝感激!

通過distinct功能,避免在組內重復item很簡單:

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

確保不多於一個“ Fleece”比較棘手,但是可以使用filtercumsum 這將刪除除第一個羊毛外的所有羊毛(在每個組中)。

  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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM