我在C#项目中有一个DataRow对象数组,我想从中总结各种字段.
我注意到DataRow [].Sum <>函数,而不是遍历每一行并总计我自己的总和,但我正在努力在网上找到关于如何使用它的任何资源.
任何正确方向的指针都会非常有用
:)删除代码示例,因为它是错误的!现在一切正常 - 链接帮助Marc欢呼.
我有两个LINQ语句,我想把它变成一个,但对于我的生活,我无法让它工作.
我不能让分组在第一个语句中工作.它抱怨说,TotalBuy并TotalSell没有属性,虽然没有抱怨AmountTC和AmountAUD.
这应该很简单.有什么想法吗?
var itineraryItems =
from ii in this.ItineraryItemRecords
join t in this.TransactionRecords on ii.OperatorID equals t.
TransactionActor.OperatorID into g select new {
OperatorID = ii.OperatorID, TotalBuy = g.Sum(i = >ii.TotalBuy)
, TotalSell = g.Sum(i = >ii.TotalSell)
, PaidTC = (0 - (g.Sum(t = >t.AmountTC)))
, PaidAUD = (0 - (g.Sum(t = >t.AmountAUD)))
};
var itineraryItemz =
from i in itineraryItems group i by i.OperatorID into g select new {
OperatorID …Run Code Online (Sandbox Code Playgroud) 我正在处理存储过程.我有一个名为#CashFlow的表,其中包含一段时间的数据.
FundID TradeDate Amount
1 1/1/2004 123.00
1 6/30/2006 100.00
2 1/1/2004 100.00
2 3/15/2010 150.00
3 1/1/2010 100.00
Run Code Online (Sandbox Code Playgroud)
我还有一个名为#Funds的表,其中包含我感兴趣的基金ID列表.(有一堆处理我不会厌烦你为我生成这个基金列表)例如,我只想说我的#Funds表中只有ID的1和2(不包括3).
我有三个时间段(所有结束时间为'8/31/2010'),从1/1/2004,2006年1月1日和2010年1月1日开始,我想汇总这三个时期的总和.
我尝试过这样的事情:
select sum(c1.amount), sum(c2.amount), sum(c3.amount)
from
#fundtable f
inner join
#cashflow c1 on f.fundid = c1.fundid and c1.tradedate between '1/1/2004' and '8/31/2010'
inner join
#cashflow c2 on f.fundid = c2.fundid and c2.tradedate between '1/1/2006' and '8/31/2010'
inner join
#cashflow c3 on f.fundid = c3.fundid and c3.tradedate between '1/1/2010' and '8/31/2010'
Run Code Online (Sandbox Code Playgroud)
但它没有做我想要的事情(实际上我无法弄清楚它到底在做什么).如果我只选择一个句点,我会得到正确的值,但是第二个我添加了一个联接,我的数字全部被打破了.
这就像我想要替换的原始查询:
select
(select sum(Amount) from #Cashflow c inner …Run Code Online (Sandbox Code Playgroud) 我正在建立自己的array<T, n>课程模板,用于娱乐和教育.C++ 0x标准草案将max_size()所有容器的成员函数指定为distance(begin(), end())"对于最大可能的容器".如何为数组实现此成员函数?我只是简单地返回std::numeric_limits<std::size_t>::max(),还是结果取决于元素类型?
嗯,std::array从当前的g ++和boost::array返回n来自max_size():
#include <array>
#include <boost/array.hpp>
#include <iostream>
int main()
{
std::array<int, 11> foo;
std::cout << foo.max_size() << std::endl; // prints 11
boost::array<int, 11> bar;
std::cout << bar.max_size() << std::endl; // prints 11
}
Run Code Online (Sandbox Code Playgroud) 我有一个表格的数据框:
Family Code Length Type
1 A 1 11 Alpha
2 A 3 8 Beta
3 A 3 9 Beta
4 B 4 7 Alpha
5 B 5 8 Alpha
6 C 6 2 Beta
7 C 6 5 Beta
8 C 6 4 Beta
Run Code Online (Sandbox Code Playgroud)
我想通过取长度值的平均值将数据集减少到包含Code的唯一值的数据集,但是也要保留所有字符串变量,即
Family Code Length Type
1 A 1 11 Alpha
2 A 3 8.5 Beta
3 B 4 7 Alpha
5 B 5 8 Alpha
6 C 6 3.67 Beta
Run Code Online (Sandbox Code Playgroud)
我已经尝试过aggregate()和ddply(),但是这些似乎用NA替换了字符串,我正在努力找到解决这个问题的方法.
我的Postgres查询从一堆传感器读数计算统计聚合:
SELECT to_char(ipstimestamp, 'YYYYMMDDHH24') As row_name,
to_char(ipstimestamp, 'FMDD mon FMHH24h') As hour_row_name,
varid As category,
(AVG(ipsvalue)::NUMERIC(5,2)) ||', ' ||
(MAX(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(MIN(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(STDDEV(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' As StatisticsValue
FROM loggingdb_ips_integer As log
JOIN ipsobjects_with_parent ips ON log.varid = ips.objectid
AND (ipstimestamp > (now()- '2 days'::interval))
GROUP BY row_name, hour_row_name, category;
Run Code Online (Sandbox Code Playgroud)
只要我有> 1 ipsvalue/hour,这就可以正常工作.但是,如果每小时COUNT(ipsvalue)<2,则StatisticsValue返回NULL而没有任何Postgres错误.
如果我注释掉STTDEV,如下所示:
(AVG(ipsvalue)::NUMERIC(5,2)) ||', ' ||
(MAX(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(MIN(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' As value
Run Code Online (Sandbox Code Playgroud)
然后正确计算所有三个统计数据.因此,我得出结论,非法STDDEV会导致整个查询失效.我宁愿让非法的STDDEV返回0.我试图COALESCE STDDEV线,但无济于事.可以做些什么?
很简单的问题.我想要做的是从一个表中选择所有列,并从另一个表中选择一列(可能有多个匹配的行)的总和.
例:
table ta (eid, uid, name, year, etc, etc, etc)
table tb (eid, uid, name, year, amount, etc, etc)
Run Code Online (Sandbox Code Playgroud)
eid- 两个表之间不匹配uid, name, year- 将在两个表之间
匹配
所以我想从表中提取所有列ta,简单:
select * from ta where eid='value';
Run Code Online (Sandbox Code Playgroud)
我想从表tb到我的结果集加入amount列,简单:
select a.*, b.amount
from ta a
inner join tb b on a.year=b.year
where a.eid='value';
Run Code Online (Sandbox Code Playgroud)
太好了,这很好用.但是如果我在表tb中有多行呢?
执行:
select a.*, sum(b.amount)
from ta a inner join tb b on a.uid=b.uid
where a.year='value';
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
列'ta.eid'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
所以我补充说:
select a.*, sum(b.amount)
from ta …Run Code Online (Sandbox Code Playgroud) 我的简化数据如下所示:
set.seed(1453); x = sample(0:1, 10, TRUE)
date = c('2016-01-01', '2016-01-05', '2016-01-07', '2016-01-12', '2016-01-16', '2016-01-20',
'2016-01-20', '2016-01-25', '2016-01-26', '2016-01-31')
df = data.frame(x, date = as.Date(date))
df
x date
1 2016-01-01
0 2016-01-05
1 2016-01-07
0 2016-01-12
0 2016-01-16
1 2016-01-20
1 2016-01-20
0 2016-01-25
0 2016-01-26
1 2016-01-31
Run Code Online (Sandbox Code Playgroud)
我想计算x == 1在指定时间段内出现的次数,例如距离当前日期的14天和30天(但不包括当前条目,如果是的话x == 1.所需的输出如下所示:
solution
x date x_plus14 x_plus30
1 2016-01-01 1 3
0 2016-01-05 1 4
1 2016-01-07 2 3
0 2016-01-12 2 3
0 2016-01-16 …Run Code Online (Sandbox Code Playgroud) 我试图在一个大表上执行此操作,以计算data.table X中具有a和b的不同组合的行.
Y <- aggregate(c ~ a+b,X,length)
Run Code Online (Sandbox Code Playgroud)
虽然RAM使用率仍然存在,但它仍然需要永远(我在30分钟后停止).
然后我尝试手动循环遍历值b并仅聚合在一起a(技术上仍然聚合b但b每次只有一个值):
sub_agg <- list()
unique_bs <- unique(X$b)
for (b_it in unique_bs){
sub_agg[[length(sub_agg)+1]] <- aggregate(c ~ a + b,subset(X, b == b_it),length)
}
Y <- do.call(rbind, sub_agg )
Run Code Online (Sandbox Code Playgroud)
我在3分钟内完成了.
我可以更进一步完全摆脱聚合,只对子集进行操作.
聚合效率是否低于嵌套循环和子集上的操作,或者这是一个特例吗?
聚合通常是占用时间最多的代码部分,所以我现在想要总是尝试循环,我想更好地理解这里发生的事情.
附加信息:
X有2000万行
b的50个不同值
a的15 000个不同的值
我有一个包含因子列的data.frame,我想在其上计算最大值(或最小值或分位数).我不能在因素上使用这些功能,但我想.
这是一些例子:
set.seed(3)
df1 <- data.frame(id = rep(1:5,each=2),height=sample(c("low","medium","high"),size = 10,replace=TRUE))
df1$height <- factor(df1$height,c("low","medium","high"))
df1$height_num <- as.numeric(df1$height)
# > df1
# id height height_num
# 1 1 low 1
# 2 1 high 3
# 3 2 medium 2
# 4 2 low 1
# 5 3 medium 2
# 6 3 medium 2
# 7 4 low 1
# 8 4 low 1
# 9 5 medium 2
# 10 5 medium 2
Run Code Online (Sandbox Code Playgroud)
我可以轻松地做到这一点:
aggregate(height_num ~ id,df1,max)
# id height_num …Run Code Online (Sandbox Code Playgroud)