我通过玩弄来学习R,我开始认为我在滥用tapply功能.是否有更好的方法可以执行以下某些操作?当然,他们工作,但随着他们变得越来越复杂,我想知道我是否会失去更好的选择.我在寻找一些批评,在这里:
tapply(var1, list(fac1, fac2), mean, na.rm=T)
tapply(var1, fac1, sum, na.rm=T) / tapply(var2, fac1, sum, na.rm=T)
cumsum(tapply(var1, fac1, sum, na.rm=T)) / sum(var1)
Run Code Online (Sandbox Code Playgroud)
更新:这是一些示例数据......
var1 var2 fac1 fac2
1 NA 275.54 10 (266,326]
2 NA 565.89 10 (552,818]
3 NA 815.41 6 (552,818]
4 NA 281.77 6 (266,326]
5 NA 640.24 NA (552,818]
6 NA 78.42 NA [78.4,266]
7 NA 1027.06 NA (818,1.55e+03]
8 NA 355.20 NA (326,552]
9 NA 464.52 NA (326,552]
10 NA 1397.11 10 (818,1.55e+03]
11 NA 229.82 NA …Run Code Online (Sandbox Code Playgroud) 通常会在接口之间放置聚合关联吗?
例:

在这里,我觉得一个聚合是多余的.接口之间的接口更重要,因为这是类的客户端将使用的.BMW和LuxuryWheel将始终通过ICar和IWheel使用.但是,ICar并没有真正聚合IWheel,因为它是一个接口并且不包含任何实际逻辑.宝马显然汇总了LuxuryWheel,但这几乎是一个实施细节.
你会如何模仿这个?UML中是否有一种方法可以将聚合(或关联)标记为抽象或待实现?
我正在寻找用于操纵data.table对象的模式,这些对象的结构类似于melt从reshape2包创建的数据帧的结构.我正在处理数百万行的数据表.表现至关重要.
问题的一般形式是是否存在基于列中的值的子集执行分组并且使分组操作的结果创建一个或多个新列的方法.
问题的一个特定形式可能是如何使用data.table以完成以下内容的等效dcast:
input <- data.table(
id=c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
variable=c('x', 'y', 'y', 'x', 'y', 'y', 'x', 'x', 'y', 'other'),
value=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
dcast(input,
id ~ variable, sum,
subset=.(variable %in% c('x', 'y')))
Run Code Online (Sandbox Code Playgroud)
其输出是
id x y
1 1 1 5
2 2 4 11
3 3 15 9
Run Code Online (Sandbox Code Playgroud) 我正在使用一个pandas DataFrame,其中一列包含numpy数组.当试图通过聚合对该列求和时,我得到一个错误,指出"必须产生聚合值".
例如
import pandas as pd
import numpy as np
DF = pd.DataFrame([[1,np.array([10,20,30])],
[1,np.array([40,50,60])],
[2,np.array([20,30,40])],], columns=['category','arraydata'])
Run Code Online (Sandbox Code Playgroud)
这按照我期望的方式工作:
DF.groupby('category').agg(sum)
Run Code Online (Sandbox Code Playgroud)
输出:
arraydata
category 1 [50 70 90]
2 [20 30 40]
Run Code Online (Sandbox Code Playgroud)
但是,由于我的实际数据框有多个数字列,因此不选择arraydata作为聚合的默认列,我必须手动选择它.这是我尝试过的一种方法:
g=DF.groupby('category')
g.agg({'arraydata':sum})
Run Code Online (Sandbox Code Playgroud)
这是另一个:
g=DF.groupby('category')
g['arraydata'].agg(sum)
Run Code Online (Sandbox Code Playgroud)
两者都给出相同的输出:
Exception: must produce aggregated value
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个使用数字而不是数组数据的列,它可以正常工作.我可以解决这个问题,但这很令人困惑,我想知道这是一个错误,还是我做错了什么.我觉得在这里使用数组可能有点边缘,确实不确定它们是否得到支持.想法?
谢谢
使用ES 1.2.1
我的聚合
{
"size": 0,
"aggs": {
"cities": {
"terms": {
"field": "city","size": 300000
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
问题是某些城市名称中包含空格并单独汇总.
比如洛杉矶
{
"key": "Los",
"doc_count": 2230
},
{
"key": "Angeles",
"doc_count": 2230
},
Run Code Online (Sandbox Code Playgroud)
我认为它与分析仪有关?我会使用哪一个不拆分空格?
我们在ES中存储小文档,表示对象的事件序列.每个活动都有一个日期/时间戳.我们需要分析一段时间内所有对象的事件之间的时间.
例如,想象一下这些事件json文档:
{"object":"one","event":"start","datetime":"2016-02-09 11:23:01"}
{"object":"one","event":"stop","datetime":"2016-02-09 11:25:01"}
{"object":"two","event":"start","datetime":"2016-01-02 11:23:01"}
{"object":"two","event":"stop","datetime":"2016-01-02 11:24:01"}
我们想要得到的是直方图,绘制两个结果时间戳增量(从开始到停止):对象1为2分/ 120秒,对象2为1分钟/ 60秒.
最终,我们希望监控启动和停止事件之间的时间,但它要求我们计算这些事件之间的时间,然后将它们聚合或提供给Kibana UI进行聚合/绘制.理想情况下,我们希望将结果直接提供给Kibana,这样我们就可以避免创建任何自定义UI.
提前感谢任何想法或建议.
我最近研究了依赖注入设计模式。
class User
{
private $db;
public function __construct(Database $db)
{
$this->$db = $db;
}
}
Run Code Online (Sandbox Code Playgroud)
我不禁怀疑这与我在聚合中学到的东西是一样的。如果我错了,请纠正我。我知道目标的依赖注入和聚集是不同的。有什么我想念的吗?
我在Elasticsearch中获得了大量数据.我的douments有一个名为"records"的嵌套字段,其中包含具有多个字段的对象列表.
我希望能够从记录列表中查询特定对象,因此我在查询中使用inner_hits字段,但它没有帮助,因为聚合使用大小0,因此不返回任何结果.
我没有成功只为inner_hits进行聚合工作,因为聚合会返回记录中所有对象的结果,无论查询是什么.
这是我正在使用的查询:(每个文档都有first_timestamp和last_timestamp字段,记录列表中的每个对象都有一个时间戳字段)
curl -XPOST 'localhost:9200/_msearch?pretty' -H 'Content-Type: application/json' -d'
{
"index":[
"my_index"
],
"search_type":"count",
"ignore_unavailable":true
}
{
"size":0,
"query":{
"filtered":{
"query":{
"nested":{
"path":"records",
"query":{
"term":{
"records.data.field1":"value1"
}
},
"inner_hits":{}
}
},
"filter":{
"bool":{
"must":[
{
"range":{
"first_timestamp":{
"gte":1504548296273,
"lte":1504549196273,
"format":"epoch_millis"
}
}
}
],
}
}
}
},
"aggs":{
"nested_2":{
"nested":{
"path":"records"
},
"aggs":{
"2":{
"date_histogram":{
"field":"records.timestamp",
"interval":"1s",
"min_doc_count":1,
"extended_bounds":{
"min":1504548296273,
"max":1504549196273
}
}
}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud) 我有一个带有这些字段的 mongo 对象:
DateTime TimeStamp;
float Value;
Run Code Online (Sandbox Code Playgroud)
如何在 C# 中使用 LINQ 获取聚合管道,以获取特定时间戳范围内 Value 的最小值、最大值和平均值?
我看过一些聚合示例,但我不太明白。有一个像这样的简单案例的例子肯定会(希望)让我理解它。
TL;DR我不知道如何编写一个在其递归部分不使用聚合函数的递归 Postgres 查询。是否有另一种方法来编写如下所示的递归查询?
假设我们有一些运动:
CREATE TABLE sports (id INTEGER, name TEXT);
INSERT INTO sports VALUES (1, '100 meter sprint');
INSERT INTO sports VALUES (2, '400 meter sprint');
INSERT INTO sports VALUES (3, '50 meter swim');
INSERT INTO sports VALUES (4, '100 meter swim');
Run Code Online (Sandbox Code Playgroud)
以及参加这些运动的运动员的一些单圈时间:
CREATE TABLE lap_times (sport_id INTEGER, athlete TEXT, seconds NUMERIC);
INSERT INTO lap_times VALUES (1, 'Alice', 10);
INSERT INTO lap_times VALUES (1, 'Bob', 11);
INSERT INTO lap_times VALUES (1, 'Claire', 12);
INSERT INTO lap_times VALUES (2, …Run Code Online (Sandbox Code Playgroud)