如何筛选R中行相互比较的条件



我有一个数据帧:

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)

我想找到的销售:

  • 同一用户在同一天从同一卖家那里购买了两次同一产品,但我当然需要更大规模地购买

我想了很长时间如何使用其中一个标准,但没有想到。在这种情况下,我应该留下的表格是:

销售日期2022-01-01球[/tr>
UserIdSellerId产品
AX
AX2022-01-01

使用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 == 2n > 1

相关内容

  • 没有找到相关文章

最新更新