我想根据两个分组变量聚合数据框中的一列,并用逗号分隔各个值.
这是一些数据:
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) 我知道在汇总数据后我可以*重新命名列:
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) 我正在寻找SELECT PRODUCT(table.price) FROM table GROUP BY table.sale类似于SUM工作方式的东西.
我是否遗漏了文档中的内容,或者确实没有PRODUCT功能?
如果是这样,为什么不呢?
注意:我在postgres,mysql和mssql中查找了函数,发现没有,所以我假设所有的sql都不支持它.
这是我的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运算符是无效的.
如何BIT在SELECT部分中包含类型列而不包括在GROUP BY?
更新.
我应该怎么需要,如果我需要包括做一个INT栏喜欢UserID在SELECT以同样的方式
我有一个需要,我想可以满足aggregate或reshape,但我不能完全弄明白.
我有一个名单(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)
我怎么做到这一点?
我正在寻找一些更好的解释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).
假设我有下表:
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,但这似乎是一个丑陋的解决方法.我错过了一些优雅的解决方案吗?
说我有一个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)
现在我想计算每个组合的观察次数name和type.这可以这样做:
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完成的.
我一直在尝试一些索引视图并留下深刻的印象,但我几乎总是需要最大或最小,并且无法理解为什么它不适用于这些,任何人都可以解释为什么?
我知道他们不被允许,我只是无法理解为什么!允许计数等为什么不MIN/MAX,我正在寻找解释......
我正在尝试对熊猫数据框进行一些聚合.这是一个示例代码:
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)
我怎么能避免这个?