我们目前正在做一个MS访问.Net网页的项目.在MS代码中,他们使用了"WorksheetFunction.Quartile“函数。请告诉我C#中的等效函数。
VBA中的示例用法:
Q1 = WorksheetFunction.Quartile(arrY,1)
发布于 2015-07-21 10:23:45
请使用以下C#代码
方法码
internal static double QUARTILE(double[] array, int nth_quartile)
{
Array.Sort(array);
double dblPercentage = 0;
switch (nth_quartile)
{
case 0:
dblPercentage = 0; //Smallest value in the data set
break;
case 1:
dblPercentage = 25; //First quartile (25th percentile)
break;
case 2:
dblPercentage = 50; //Second quartile (50th percentile)
break;
case 3:
dblPercentage = 75; //Third quartile (75th percentile)
break;
case 4:
dblPercentage = 100; //Largest value in the data set
break;
default:
dblPercentage = 0;
break;
}
if (dblPercentage >= 100.0d) return array[array.Length - 1];
double position = (double)(array.Length + 1) * dblPercentage / 100.0;
double leftNumber = 0.0d, rightNumber = 0.0d;
double n = dblPercentage / 100.0d * (array.Length - 1) + 1.0d;
if (position >= 1)
{
leftNumber = array[(int)System.Math.Floor(n) - 1];
rightNumber = array[(int)System.Math.Floor(n)];
}
else
{
leftNumber = array[0]; // first data
rightNumber = array[1]; // first data
}
if (leftNumber == rightNumber)
return leftNumber;
else
{
double part = n - System.Math.Floor(n);
return leftNumber + part * (rightNumber - leftNumber);
}
} 测试代码
double FirstQuartile = QUARTILE(numbers, 1);
double Median = QUARTILE(numbers, 2);
double ThirdQuartile = QUARTILE(numbers, 3); 发布于 2015-07-16 12:09:14
我不知道有什么像这样的好的小功能,虽然会很有帮助。我建议安装math.NET http://www.mathdotnet.com/
这里显示了SortedArrayStatistics http://numerics.mathdotnet.com/api/MathNet.Numerics.Statistics/SortedArrayStatistics.htm中包含的所有内容
下面是一个四分位数的例子,我相信它能满足您的需要。
using System;
using MathNet.Numerics.Statistics;
class Test
{
static void Main()
{
double[] numbers = new double[] { 1, 2, 3, 4, 5 };
double a = SortedArrayStatistics.Minimum(numbers);
double b = SortedArrayStatistics.LowerQuartile(numbers);
double c = SortedArrayStatistics.Median(numbers);
double d = SortedArrayStatistics.UpperQuartile(numbers);
double e = SortedArrayStatistics.Maximum(numbers);
Console.WriteLine("{0}\n{1}\n{2}\n{3}\n{4}\n", a,b,c,d,e);
}
}输出
1
1.66666666666667
3
4.33333333333333
5https://stackoverflow.com/questions/31451446
复制相似问题