执行摘要:*提高下面聚合fn调用中使用的基于日期的提取函数的内存效率; 不吹灭1Gb内存限制.*.
我有一个大的数据集TR存储在数据帧(3个COLS,1200万行;〜200MB)
的列CUSTOMER_ID(整数),VISIT_DATE和visit_spend(数字)的数据集需要注册,所以这是因为它可以作为可再现的be:
数据集看起来像(完整文件在这里,需要注册):
customer_id,visit_date,visit_spend
2,2010-04-01,5.97
2,2010-04-06,12.71
2,2010-04-07,34.52
#... 12146637 rows in total
Run Code Online (Sandbox Code Playgroud)
日期范围限制在2010-04-01 ... 2011-06-30(整数14700..15155)
在这里,我想问为visit_date字段选择什么是最佳表示.我做了一些aggregate调用(底部的示例代码)来炸毁内存.我也使用日期实用程序fns,就像这里附带的东西(它们需要重新编码以获得紧凑性,但这些是我想做很多的典型操作).所以我需要一个代表避免这个的日期.
正如我所看到的,我可以使用三种可能的表示来访问visit_date字段,这里有优点和缺点,我正在尝试做什么.我的目标是获得不会破坏内存的格式,并在这些日期处理操作,聚合等方面给予最少的悲伤:
class(tr$visit_date)<-'Date')或使用时得到的任何东西read.csv(colClasses=c(...,"Date",...)这些是我希望运行很多的日期实用程序fns(但目前它们在聚合期间会爆炸):
# Utility fns related to date
library(chron)
# Get dayoftheweek as integer 0(Sun)..6(Sat)
dayofweek <- function(ddd) {
with( month.day.year(ddd), day.of.week(month,day,year) …Run Code Online (Sandbox Code Playgroud) 在我目前的项目(电子商务网站)中,我们有不同的有界背景,例如:结账过程中的结算,交付或付款.
除此之外,根据客户的购买要求,结账流程也会有所不同.因此,根据购物车的内容,结帐过程中的步骤数可能会有所不同,或者我们不会/将要求她提供某些信息.
那么,是否应该为每种不同类型的结账流程创建不同的有界上下文?
例如,订单聚合根将根据结帐流程EticketsOrder而不同(在此上下文中我们不需要递送地址,因此我们不会向用户询问)Ticket BillingAddress
ClothesOrder(在这种情况下,我们需要一个送货地址,在结账过程中还有一个额外的步骤来获得这个)衣服BillingAddress DeliveryAddress
这种分离意味着创建两个不同的域实体,即使它们具有相似的属性.
模拟这类问题的最佳方法是什么?如何找到上下文边界?
我无法弄清楚如何做到这一点.我在R中有一个data.frame.它看起来像这样:
Scores <- read.table(text = "
ID Test1 Test2 Test3 Final
1 Student1 20 23 21 48
2 Student2 16 15 18 36
3 Student3 25 20 22 40
4 Student4 14 19 18 42
5 Student5 10 15 14 30
")
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个新的数据对象,其中包含每个测试的值范围,包括final.所以它看起来像这样:
result <- read.table(text = "
min max
Test1 10 25
Test2 15 23
Test3 14 22
Final 30 48
")
Run Code Online (Sandbox Code Playgroud)
老实说,无论是仅列出最大值和最小值,还是实际计算差值,我都无所谓.我只是无法找到实现这一点的方法,这不是一种不必要的复杂.我知道我可以手动和单独拉出列,但必须有一些更好的方法来做到这一点.有什么涉及by()或tapply()?但我无法让他们工作.
有任何想法吗?
假设我有以下格式的数据集:
var smallTestData = [
{"YEAR": "2009", "MONTH": "1", "CUSTOMER": "Customer1", "REVENUE": "1938.49488391425"},
{"YEAR": "2009", "MONTH": "1", "CUSTOMER": "Customer2", "REVENUE": "75.9142774343491"},
{"YEAR": "2009", "MONTH": "1", "CUSTOMER": "Customer2", "REVENUE": "99.3456067931875"} ...];
Run Code Online (Sandbox Code Playgroud)
现在,如果我想绘制一个D3或C3图表来显示每个客户每年和每月的累计收入,我想我最终会得到这样的结果:
[{"yearMonth":"2009 1","revenueCustomer1":158989,"revenueCustomer2":68181},
{"yearMonth":"2009 2","revenueCustomer1":171217,"revenueCustomer2":204975},
{"yearMonth":"2009 3","revenueCustomer1":38477,"revenueCustomer2":46605} ...];
Run Code Online (Sandbox Code Playgroud)
当然,这看起来并不优雅,但那没什么.最糟糕的部分是基于多维度(例如,年,月,客户)的度量(例如收入)的聚合,这对于JSON数据来说是一件痛苦的事情.
我已经尝试编写自己的聚合函数来解决这个问题,但除了手动将值一起添加之外,找不到任何令人满意的解决方案.谁能引导我朝着正确的方向前进?您将如何汇总数据以适应我所描述的图表类型?有没有现成的解决方案?
既然我们正在讨论这个话题,您将如何基于主键加入两个或更多数据集?
谢谢!
这是我第一次就堆栈溢出问一个问题.我试过寻找答案,但我找不到我想要的东西.我希望有人能帮帮忙.
我有一个20416观测的庞大数据集.基本上,我有83个科目,每个科目我有几个观察.然而,每个受试者的观察数量不相同(例如,受试者1具有256个观察结果,而受试者2仅具有64个观察结果).我想添加一个额外的列,其中包含每个主题的观察结果(观察结果是阅读时间(RT)).
我尝试使用聚合函数:
aggregate (RT ~ su, data, mean)
Run Code Online (Sandbox Code Playgroud)
该公式返回每个主题的正确平均值.但后来我不能简单地做到以下几点:
data$mean <- aggregate (RT ~ su, data, mean)
Run Code Online (Sandbox Code Playgroud)
因为R返回此错误:
$ < - .data.frame(tmp,"mean",value = list(su = 1:83,RT = c(378.1328125,:替换有83行,数据有20416)出错
我知道公式缺少一个命令,指定必须为所有主题行重复每个主题的平均值(例如,如果主题1有256行,则主题1的平均值必须重复256行,如果主题2有64行,主题2的平均值必须重复64行,依此类推).
我怎样才能在R中实现这一目标?
请帮帮我.我有一个具有许多过滤条件的LinQ查询.
以下是我的查询:
var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
.Distinct()
.Aggregate((i, j) => i + ";" + j)
.Split(';')
.Distinct();
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我收到错误:
Error Message : Sequence contains no elements
Stack Trace : at System.Linq.Enumerable.Aggregate[TSource](IEnumerable`1 source, Func`3 func)
Run Code Online (Sandbox Code Playgroud)
我是linQ的新手.请建议.
我用Google搜索,并尝试使用 **.DefaultIfEmpty()**之前Aggregator,如下图所示:
var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
.Distinct()
.DefaultIfEmpty()
.Aggregate((i, j) => i + ";" + j)
.Split(';')
.Distinct();
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
有什么建议?
我想按数量总和的降序对值列表进行排序,而不会覆盖数量的原始值.
所以,假设我的数据列表是:
Reason=Quality, Quantity=10
Reason=Quality, Quantity=10
Reason=Customer, Quantity=8
Reason=Carrier, Quantity=17
Reason=Customer, Quantity=1
Run Code Online (Sandbox Code Playgroud)
我如何执行lambda表达式来按总量排序?我希望得到以下内容:
Reason=Quality, Quantity=10
Reason=Quality, Quantity=10
Reason=Carrier, Quantity=17
Reason=Customer, Quantity=8
Reason=Customer, Quantity=1
Run Code Online (Sandbox Code Playgroud)
质量是第一位的,因为总价值是20.客户是最后的,因为总价值是1.
这就是我目前所拥有的,但无论如何都没有修改数据而不修改原始数据
eData.OrderByDescending(o => o.Quantity);
Run Code Online (Sandbox Code Playgroud)
我能想到完成这项任务的唯一方法是添加另一个变量并选择Select with Sum将所有新变量添加到该值,然后将OrderByDescending添加到该值上.但是,在我这样做之前,只想看看是否有更简单的方法.
我有一个数据框,通过以下方式:
df <- structure(list(celltype = structure(c(1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L), .Label = c("Bcells",
"DendriticCells", "Macrophages", "Monocytes", "NKCells", "Neutrophils",
"StemCells", "StromalCells", "abTcells", "gdTCells"), class = "factor"),
sample = c("SP ID control", "SP ID treated", "SP ID control",
"SP ID treated", "SP ID control", "SP ID treated", "SP ID control",
"SP ID treated", "SP ID control", "SP ID treated", "SP ID control",
"SP ID treated", "SP ID …Run Code Online (Sandbox Code Playgroud) 我在R中有一个大表,需要计算其中一列中值的出现次数,另外将计数放在它自己的列中.没有聚合.
所以,如果我有:
var
23456
34567
45678
23456
etc
Run Code Online (Sandbox Code Playgroud)
我的输出应该是:
var count
23456 2
34567 1
45678 1
23456 2
etc
Run Code Online (Sandbox Code Playgroud)
我已经真正阅读了所有的线程,但似乎无法在没有聚合的情况下找到这样做的方法.我需要的是相当于excel的count(A1:A4;A1).
我有一个带日期的data.frame并且失败。现在,我想计算每个时间段的连续失败以及开始日期和结束日期。
例如,
data <- data.frame(date = seq.Date(as.Date("2019-01-01"), by = "days",length.out = 14),
fail = c(1,1,0,0,0,1,1,1,1,0,1,0,0,0))
date fail
1 2019-01-01 1
2 2019-01-02 1
3 2019-01-03 0
4 2019-01-04 0
5 2019-01-05 0
6 2019-01-06 1
7 2019-01-07 1
8 2019-01-08 1
9 2019-01-09 1
10 2019-01-10 0
11 2019-01-11 1
12 2019-01-12 0
13 2019-01-13 0
Run Code Online (Sandbox Code Playgroud)
结果应该是
duration start end
2 2019-01-01 2019-01-02
4 2019-01-06 2019-01-09
1 2019-01-11 2019-01-11
Run Code Online (Sandbox Code Playgroud)
我尝试使用失败索引的差异来获得所需的结果。但是,我正在努力获得结果。关于任何帮助将不胜感激。