我正在尝试将Repository模式用于我当前的项目,而我目前正在尝试对域进行建模并找到聚合根.
我已经读过"级联删除"规则,该规则指出如果在删除根时删除成员没有意义,那么它不应该是根目录的一部分.
我将以警察事件为例: -
事件(聚合根) - 这可能包含调查人员,每个官员做的笔记.它还可能包含嫌疑人的受访日期列表.是否为此事件获得了闭路电视录像?每次看CCTV的日志和谁?是中央电视台为证据/法庭等制作的副本
似乎IncidentAggregate可能会变得庞大,因为它看起来一切都挂在那个事件上.
我的问题是双重的,聚合根应该管理多少,根源是一个好主意?
这可能不是一个特别好的例子,因为你可能永远不会删除类似警察事件的东西,但我希望它能更好地描述我的问题.
c# domain-driven-design aggregate aggregateroot repository-pattern
我正在查看aggregateR中函数的帮助页面.我从未使用过这个便利功能,但我有一个过程应该可以帮助我加快速度.但是,我完全无法通过这个例子来理解发生了什么.
一个例子如下:
1> aggregate(state.x77, list(Region = state.region), mean)
Region Population Income Illiteracy Life Exp Murder HS Grad Frost Area
1 Northeast 5495 4570 1.000 71.26 4.722 53.97 132.78 18141
2 South 4208 4012 1.738 69.71 10.581 44.34 64.62 54605
3 North Central 4803 4611 0.700 71.77 5.275 54.52 138.83 62652
4 West 2915 4703 1.023 71.23 7.215 62.00 102.15 134463
Run Code Online (Sandbox Code Playgroud)
这里的输出正是我所期望的.所以我试着了解发生了什么.所以我看看state.x77
1> head(state.x77)
Population Income Illiteracy Life Exp Murder HS Grad Frost Area
Alabama 3615 3624 2.1 …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,我从这样的文件中读取:
name, points, wins, losses, margin
joe, 1, 1, 0, 1
bill, 2, 3, 0, 4
joe, 5, 2, 5, -2
cindy, 10, 2, 3, -2.5
Run Code Online (Sandbox Code Playgroud)
等等
我想在这些数据的所有行中平均列值,是否有一种简单的方法在R中执行此操作?
例如,我想获得所有"Joe's"的平均列值,如下所示
joe, 3, 1.5, 2.5, -.5
Run Code Online (Sandbox Code Playgroud) 我有一个数据框df,其行与名称列重复,但不是值列的重复:
name value etc1 etc2
A 9 1 X
A 10 1 X
A 11 1 X
B 2 1 Y
C 40 1 Y
C 50 1 Y
Run Code Online (Sandbox Code Playgroud)
我需要将重复的名称聚合成一行,同时计算值列的平均值.预期产量如下:
name value etc1 etc2
A 10 1 X
B 2 1 Y
C 45 1 Y
Run Code Online (Sandbox Code Playgroud)
我试过用,df[duplicated(df$name),]但当然这并没有给我重复的意思.我想使用aggregate(),但问题是此函数的FUN部分也将适用于所有其他列,并且除了其他问题之外,它将无法计算char内容.由于所有其他列都具有与"重复"相同的内容,因此我需要将它们聚合,就像名称列一样.任何提示......?
我有一个由a组成的数据帧ID,对于组中的每个元素都是相同的,两个日期时间和这两者之间的时间间隔.其中一个日期时间对象是我的相关时间标记.现在我想获得数据帧的子集,其中包含每个组的最早条目.条目(尤其是时间间隔)需要保持不变.
我的第一种方法是根据1. ID和2.相关日期时间对帧进行排序.但是,我无法返回每个新组的第一个条目.
然后我一直在查看函数aggregate()以及ddply()函数但是我找不到两个选项,只返回第一个条目而不将聚合函数应用于时间间隔值.
是否有(简单)方法来实现这一目标?
附加:也许我不清楚添加我的aggregate()和ddply()注释.我不一定需要聚合.鉴于数据框的排序方式是每个新组的第一行是我要查找的行,只需返回一个子集,其中每一行的ID都与之前的ID不同(即每个新组的起始行).
示例数据:
structure(list(ID = c(1454L, 1322L, 1454L, 1454L, 1855L, 1669L,
1727L, 1727L, 1488L), Line = structure(c(2L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L), .Label = c("A", "B", "C"), class = "factor"),
Start = structure(c(1357038060, 1357221074, 1357369644, 1357834170,
1357913412, 1358151763, 1358691675, 1358789411, 1359538400
), class = c("POSIXct", "POSIXt"), tzone = ""), End = structure(c(1357110430,
1357365312, 1357564413, 1358230679, 1357978810, 1358674600,
1358853933, 1359531923, 1359568151), class = c("POSIXct",
"POSIXt"), tzone = ""), …Run Code Online (Sandbox Code Playgroud) 当使用df.mean()时,我得到一个结果,其中给出了每列的平均值.现在让我们说我想要第一列的平均值,以及第二列的总和.有没有办法做到这一点?我不想拆卸和重新组装数据帧.
我最初的想法是按照pandas.groupby.agg()的方式做一些事情:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用.看起来传递一个字典会是一种直观的方式,但还有另一种方式(再次没有拆解和重新组装DataFrame)吗?
在使用自定义函数循环数据框中的组时遇到一些麻烦.
以下是一些示例数据:
set.seed(42)
tm <- as.numeric(c("1", "2", "3", "3", "2", "1", "2", "3", "1", "1"))
d <- as.numeric(sample(0:2, size = 10, replace = TRUE))
t <- as.numeric(sample(0:2, size = 10, replace = TRUE))
h <- as.numeric(sample(0:2, size = 10, replace = TRUE))
df <- as.data.frame(cbind(tm, d, t, h))
df$p <- rowSums(df[2:4])
Run Code Online (Sandbox Code Playgroud)
我创建了一个自定义函数来计算值w:
calc <- function(x) {
data <- x
w <- (1.27*sum(data$d) + 1.62*sum(data$t) + 2.10*sum(data$h)) / sum(data$p)
w
}
Run Code Online (Sandbox Code Playgroud)
当我在整个数据集上运行该函数时,我得到以下答案:
calc(df)
[1]1.664474
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想返回按tm分组的结果,例如:
tm w
1 result of calc …Run Code Online (Sandbox Code Playgroud) 我试图在我的数据中找到在多个方面相同的条目.我目前使用嵌套聚合的复杂查询来执行此操作:
{
"size": 0,
"aggs": {
"duplicateFIELD1": {
"terms": {
"field": "FIELD1",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD2": {
"terms": {
"field": "FIELD2",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD3": {
"terms": {
"field": "FIELD3",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD4": {
"terms": {
"field": "FIELD4",
"min_doc_count": 2 },
"aggs": {
"duplicate_documents": {
"top_hits": {} } } } } } } } } } } }
Run Code Online (Sandbox Code Playgroud)
这在某种程度上起作用,因为当没有找到重复项时,我得到的结果如下所示:
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : …Run Code Online (Sandbox Code Playgroud) table1如下表所示
+--------+-------+-------+------------+-------+
| flight | orig | dest | passenger | bags |
+--------+-------+-------+------------+-------+
| 1111 | sfo | chi | david | 3 |
| 1112 | sfo | dal | david | 7 |
| 1112 | sfo | dal | kim | 10|
| 1113 | lax | san | ameera | 5 |
| 1114 | lax | lfr | tim | 6 |
| 1114 | lax | lfr | jake | 8 | …Run Code Online (Sandbox Code Playgroud) 可以说我在python中有以下列表.首先按装备订购,然后按日期订购:
my_list = [
{'Equip': 'A-1', 'Job': 'Job 1', 'Date': '2018-01-01'},
{'Equip': 'A-1', 'Job': 'Job 1', 'Date': '2018-01-02'},
{'Equip': 'A-1', 'Job': 'Job 1', 'Date': '2018-01-03'},
{'Equip': 'A-1', 'Job': 'Job 2', 'Date': '2018-01-04'},
{'Equip': 'A-1', 'Job': 'Job 2', 'Date': '2018-01-05'},
{'Equip': 'A-2', 'Job': 'Job 1', 'Date': '2018-01-03'},
{'Equip': 'A-2', 'Job': 'Job 3', 'Date': '2018-01-04'},
{'Equip': 'A-2', 'Job': 'Job 3', 'Date': '2018-01-05'}
]
Run Code Online (Sandbox Code Playgroud)
我想要做的是按照设备的工作不变的每一组折叠列表,并抓住设备在那里的第一个和最后一个日期.例如,这个简单的例子应该改为:
list_by_job = [
{'Equip': 'A-1', 'Job': 'Job 1', 'First': '2018-01-01', 'Last': '2018-01-03'},
{'Equip': 'A-1', 'Job': 'Job 2', 'First': …Run Code Online (Sandbox Code Playgroud)