我有一个数据帧:
UserId <- c("A", "A", "A", "B", "B", "B")
SellerId <- c("X", "X", "Y", "Y", "Z", "Z")
Product <- c("ball", "ball", "ball", "ball", "doll", "doll")
SalesDate <- c("2022-01-01", "2022-01-01", "2022-01-02", "2022-01-04", "2022-01-06", "2022-01-07")
sales <- data.frame(UserId, SellerId, Product, SalesDate)
我想找到的销售:
- 同一用户在同一天从同一卖家那里购买了两次同一产品,但我当然需要更大规模地购买
我想了很长时间如何使用其中一个标准,但没有想到。在这种情况下,我应该留下的表格是:
UserId | SellerId | 产品 | 销售日期
---|---|---|
A | X | 球 | 2022-01-01
A | X | 球2022-01-01 | [/tr>
使用dplyr
,可以将group_by_all
变量和filter
输出任何不超过1条记录的内容。
library(dplyr)
sales %>% group_by_all() %>% filter(n() > 1)
# A tibble: 2 × 4
# Groups: UserId, SellerId, Product, SalesDate [1]
UserId SellerId Product SalesDate
<chr> <chr> <chr> <chr>
1 A X ball 2022-01-01
2 A X ball 2022-01-01
按所有分组并使用filter
。与@benson23+1的区别在于使用across
:
library(dplyr)
sales %>%
group_by(across(everything())) %>%
filter( n() > 1 )
或者即使everything()
是默认值:
sales %>%
group_by(across()) %>%
filter( n() > 1 )
使用add_count()
将为您提供每次出现的次数。
sales %>%
add_count(UserId, SellerId, Product, SalesDate)
UserId SellerId Product SalesDate n
1 A X ball 2022-01-01 2
2 A X ball 2022-01-01 2
3 A Y ball 2022-01-02 1
4 B Y ball 2022-01-04 1
5 B Z doll 2022-01-06 1
6 B Z doll 2022-01-07 1
从那时起,您可以根据您的问题筛选n == 2
或n > 1
。