我已经搜索了平均lambda表达式究竟是如何工作的,但无法找到。
我的问题是:我有一些用不同方式表示的情绪分类。例如,正数句子由数字>表示。它可以是从1到无穷大(1,2,5,100 ......),对于否定句子可以是相同的方式,但用数字< 0表示。比0(-1,-2 .....) - 我知道这不是代表它的更好方式。
我需要计算阳性发生率。我在这里找到SOF问题的每一个答案,如果我将所有数值相加并除以总数,我将找到平均数。没关系。
例如,如果我有11个句子,10个是正值,值= 1,(sum = 10),一个句子为负值,值= -10,我的平均值将是:10-10 / 11 = 0。 / p>
var average = context.CatchDetails.Where(x => x.Monitoring.Client.Id == custmrid
&& x.Data.published >= datai2
&& x.Data.published <= dataf2
&& x.Monitoring.id == monitoring).ToList().Average(y => y.Sentiment);
我正在做的是,取所有正面句子(计数)并除以总句子(计数)。例如:
总数= 11
正数= 10
10/11 = 0.9090,即90,90%的正面事件。
var positive = context.CatchDetails.Count(x => (x.Monitoring.Client.Id == custmrid)
&& x.Data.published >= datai2 && x.Data.published <= dataf2
&& x.Monitoring.id == monitoring
&& x.Sentiment > 0);
var total = context.CatchDetails.Count(x => (x.Monitoring.Client.Id == custmrid)
&& x.Data.published >= datai2 && x.Data.published <= dataf2
&& x.Monitoring.id == monitoring);
double mediaPositive = ((double)positive / (double)total);
有没有更好的可能性呢?
搜索:
答案 0 :(得分:1)
您可以操作从一个LINQ运算符传递到另一个LINQ运算符的数据:
var avg = data.Select(x => x.Sentiment > 0 ? x.Sentiment : 0)
.Average();
因此,将所有负值视为零。
或者,如果您想忽略某些项目的价值,但仍然将其包括在计数中,则您需要自己进行平均计算。
var count = data.Count();
var total = data.Select(x => x.Sentiment > 0).Sum(x => x.Sentiment);
// Avoid divide by zero if no data...
var avg = count > 0 ? total/count : defaultValue;
但是,您似乎只想要两个不同的计数:
var totalCount = data.Count();
var positiveCount = data.Select(x => x.Sentiment > 0).Count();
// Ignore totalCount == 0! But force floating point calc.
var res = (double)positiveCount / totalCount;