R sqldf 计数,分组依据,> 1

R sqldf Count, Group By, Having > 1

我有一个有 3 列的 table 和几千条记录,示例如下:

df1 <- data.frame(
  ID = c('V1', 'V1', 'V1', 'V3', 'V3', 'V3', 'V4', 'V5','V5','V5'),
  Category = c('a', 'a', 'a', 'a', 'b', 'b', 'a', 'b', 'c', 'c'),
  Amount   = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1))

需要用sqldf查询,按ID和Category对数据进行分组,然后合计金额,当ID多于一个类别时,只需要return行。结果如下所示:

ID  Category Amount_Sum
V3  a        1
V3  b        2
V5  b        1
V5  c        2

我尝试了以下代码,但它并没有真正起作用,还有另一个 row_number over partition 哪种方法有效,但比需要许多额外查询的时间长得多。

df2 <- sqldf::sqldf("
  SELECT   Count(*) [CNT]
           [ID], 
           [Category], 
           SUM([Amount]) [amount]
  FROM     df1
  GROUP BY [ID], 
           [Category]
  Having   Count(*) > 1")

在 R 中使用 sqldf 获取该输出的最佳方法是什么?谢谢!

您可以添加一个连接,该连接仅限于具有多个类别的 ID:

SELECT t1.ID, t1.Category, t1.Amount_Sum
FROM
(
    SELECT ID, Category, SUM(Amount) AS Amount_Sum
    FROM df1
    GROUP BY ID, Category
) t1
INNER JOIN
(
    SELECT ID
    FROM df1
    GROUP BY ID
    HAVING COUNT(DISTINCT Category) > 1
) t2
    ON t2.ID = t1.ID;