标签: aggregate

将列折叠/连接/聚合到每个组中的单个逗号分隔字符串

我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值.

这是一些数据:

data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10))
data
#     A B  C
# 1 111 1  5
# 2 111 2  6
# 3 111 1  7
# 4 222 2  8
# 5 222 1  9
# 6 222 2 10    
Run Code Online (Sandbox Code Playgroud)

"A"和"B"是分组变量,"C"是我想要折叠成逗号分隔character字符串的变量.我试过了:

library(plyr)
ddply(data, .(A,B), summarise, test = list(C))

    A B  test
1 111 1  5, 7
2 111 2     6
3 222 1     9
4 222 …
Run Code Online (Sandbox Code Playgroud)

aggregate r r-faq

53
推荐指数
3
解决办法
2万
查看次数

在R中汇总聚合内的列

我知道在汇总数据后我可以*重新命名列:

blubb <- aggregate(dat$two ~ dat$one, ...)
colnames(blubb) <- c("One", "Two")
Run Code Online (Sandbox Code Playgroud)

没有错.但有没有办法一次性聚合和命名列?有点像:

blubb <- aggregate( ... , cols = c("One", "Two"))
Run Code Online (Sandbox Code Playgroud)

以某种方式捕获原始列名称并且如下所示,这将是特别好的(并且防止错误):

blubb <- aggregate( ... , cols = c(name_of_dat$one, name_of_dat$two."_Mean"))
Run Code Online (Sandbox Code Playgroud)

aggregate r rename

52
推荐指数
3
解决办法
5万
查看次数

为什么SQL中没有PRODUCT聚合函数?

我正在寻找SELECT PRODUCT(table.price) FROM table GROUP BY table.sale类似于SUM工作方式的东西.

我是否遗漏了文档中的内容,或者确实没有PRODUCT功能?

如果是这样,为什么不呢?

注意:我在postgres,mysql和mssql中查找了函数,发现没有,所以我假设所有的sql都不支持它.

sql aggregate

51
推荐指数
5
解决办法
4万
查看次数

如何在SELECT部分​​中包含BIT类型列而不包含在T-SQL中的GROUP BY上?

这是我的T-SQL查询

SELECT 
    ProductID,
    VendorID,
    ProductName= MAX(ProductName),
    VendorName = MAX(VendorName),
    IsActive = MAX(IsActive) # This brings error 
FROM ProductVendorAssoc 
GROUP BY  
    ProductID,
    VendorID
Run Code Online (Sandbox Code Playgroud)

我想GROUP BY只应用于ProductID and VendorID字段,但需要填充ProductID, VendorID, ProductName, VendorName, IsActive字段.

在这里,我使用agreggate函数MAX(ProductName)来避免ProductName在group by列表中.

但是同样的技巧不适用于BIT列,因为操作数数据类型位对于max运算符是无效的.

如何BITSELECT部分中包含类型列而不包括在GROUP BY

更新.

我应该怎么需要,如果我需要包括做一个INT栏喜欢UserIDSELECT以同样的方式

sql t-sql group-by aggregate

51
推荐指数
2
解决办法
3万
查看次数

通过唯一标识符进行聚合并将相关值连接到字符串中

我有一个需要,我想可以满足aggregatereshape,但我不能完全弄明白.

我有一个名单(brand)列表和随附的ID号(id).这些数据是长形式的,因此名称可以有多个ID.我想通过名称(brand)去重复,并将多个可能id的连接到由注释分隔的字符串中.

例如:

brand            id 
RadioShack       2308
Rag & Bone       4466
Ragu             1830
Ragu             4518
Ralph Lauren     1638
Ralph Lauren     2719
Ralph Lauren     2720
Ralph Lauren     2721
Ralph Lauren     2722 
Run Code Online (Sandbox Code Playgroud)

应成为:

RadioShack       2308
Rag & Bone       4466
Ragu             1830,4518
Ralph Lauren     1638,2719,2720,2721,2722
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?

aggregate r concatenation

51
推荐指数
4
解决办法
4万
查看次数

解释Spark中的聚合功能

我正在寻找一些更好的解释python中通过spark提供的聚合功能.

我的例子如下(使用Spark 1.2.0版本的pyspark)

sc.parallelize([1,2,3,4]).aggregate(
  (0, 0),
  (lambda acc, value: (acc[0] + value, acc[1] + 1)),
  (lambda acc1, acc2: (acc1[0] + acc2[0], acc1[1] + acc2[1])))
Run Code Online (Sandbox Code Playgroud)

输出:

(10, 4)
Run Code Online (Sandbox Code Playgroud)

我得到的预期结果(10,4)1+2+3+44个元素的总和.如果我改变传递给聚合函数初始值(1,0)(0,0) 我得到以下结果

sc.parallelize([1,2,3,4]).aggregate(
    (1, 0),
    (lambda acc, value: (acc[0] + value, acc[1] + 1)),
    (lambda acc1, acc2: (acc1[0] + acc2[0], acc1[1] + acc2[1])))
Run Code Online (Sandbox Code Playgroud)

输出:

(19, 4)
Run Code Online (Sandbox Code Playgroud)

该值增加9.如果我将其更改为(2,0),则值将转到(28,4)依此类推.

有人可以向我解释这个值的计算方法吗?我预计价值会上升1而不是9,(11,4)我预计会看到(19,4).

python lambda aggregate apache-spark rdd

50
推荐指数
3
解决办法
3万
查看次数

Uniqueidentifier(GUID)上的聚合函数

假设我有下表:

category | guid
---------+-----------------------
   A     | 5BC2...
   A     | 6A1C...
   B     | 92A2...
Run Code Online (Sandbox Code Playgroud)

基本上,我想做以下SQL:

SELECT category, MIN(guid)
  FROM myTable
 GROUP BY category
Run Code Online (Sandbox Code Playgroud)

它不一定是MIN.我只想返回每个类别的一个 GUID.我不在乎哪一个.不幸的是,SQL Server不允许在GUID上使用MIN或MAX.

当然,我可以将guid转换为varchar,或者创建一些嵌套的TOP 1 SQL,但这似乎是一个丑陋的解决方法.我错过了一些优雅的解决方案吗?

sql sql-server guid aggregate uniqueidentifier

47
推荐指数
3
解决办法
3万
查看次数

计算每组观察/行数,并将结果添加到数据框

说我有一个data.frame对象:

df <- data.frame(name=c('black','black','black','red','red'),
                 type=c('chair','chair','sofa','sofa','plate'),
                 num=c(4,5,12,4,3))
Run Code Online (Sandbox Code Playgroud)

现在我想计算每个组合的观察次数nametype.这可以这样做:

table(df[ , c("name","type")])
Run Code Online (Sandbox Code Playgroud)

或者也可能plyr,(虽然我不确定如何).

但是,如何将结果合并到原始数据框中?这样结果将如下所示:

df
#    name  type num count
# 1 black chair   4     2
# 2 black chair   5     2
# 3 black  sofa  12     1
# 4   red  sofa   4     1
# 5   red plate   3     1
Run Code Online (Sandbox Code Playgroud)

这里count现在存储从聚集的结果.

一个解决方案plyr也可能很有趣,但我希望看到这是如何用基础R完成的.

aggregate r count r-faq

46
推荐指数
4
解决办法
9万
查看次数

为什么索引视图不能有MAX()聚合?

我一直在尝试一些索引视图并留下深刻的印象,但我几乎总是需要最大或最小,并且无法理解为什么它不适用于这些,任何人都可以解释为什么?

我知道他们不被允许,我只是无法理解为什么!允许计数等为什么不MIN/MAX,我正在寻找解释......

sql-server indexing aggregate view

44
推荐指数
1
解决办法
1万
查看次数

从Pandas聚合重命名结果列("FutureWarning:使用带重命名的dict已弃用")

我正在尝试对熊猫数据框进行一些聚合.这是一个示例代码:

import pandas as pd

df = pd.DataFrame({"User": ["user1", "user2", "user2", "user3", "user2", "user1"],
                  "Amount": [10.0, 5.0, 8.0, 10.5, 7.5, 8.0]})

df.groupby(["User"]).agg({"Amount": {"Sum": "sum", "Count": "count"}})

Out[1]: 
      Amount      
         Sum Count
User              
user1   18.0     2
user2   20.5     3
user3   10.5     1
Run Code Online (Sandbox Code Playgroud)

这会产生以下警告:

FutureWarning:使用带重命名的dict已弃用,将在以后的版本中返回super(DataFrameGroupBy,self).aggregate(arg,*args,**kwargs)

我怎么能避免这个?

python aggregate rename pandas

44
推荐指数
4
解决办法
2万
查看次数