[英]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”比較棘手,但是可以使用filter
和cumsum
。 這將刪除除第一個羊毛外的所有羊毛(在每個組中)。
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.