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;
我有一个有 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;