我正在尝试用NAN填充一组时间数据中的间隙以用于绘图目的。我试图通过为所有可能的时间段创建一组NAN数据并使用Union将它们合并在一起来做到这一点。我希望真正的数据覆盖NAN值,留下我想要的数据集。
这是我设置NAN数据集和代码的代码。覆盖(使用先前获得的AveragedData):
//Calculate time period
var days = (int)(endDate - startDate).TotalMinutes + 1;
//create a set of minute data for the correct time-range
var clockQuery = from offset in Enumerable.Range(0, days)
select TimeSpan.FromMinutes(
var completeSequence = clockQuery.Select(add => minRoundStartDate.Add(add));
//Create the NAN dataset
var nullData = from date in completeSequence
select new SensorValue{ MeasureTime = date, Value = double.NaN };
//Merge data
var mergedData = nullData.Union(AveragedData, new SensorValueComparer()).ToList();
这是SensorValueComparer。起初我只是“比较”并测试了0,但它没有达到任何值,所以我测试了添加一个点,当两个日期完全相同时(分钟数据应该发生很多)。但是那个断点也没有受到打击。我已经检查过,mergedData包含两个数据集,以及与MeasuredData相等的场合。
public class SensorValueComparer : IEqualityComparer<SensorValue>
{
public bool Equals(SensorValue x, SensorValue y)
{
var ret = x.MeasureTime.CompareTo(y.MeasureTime);
if (x.MeasureTime.ToOADate() == y.MeasureTime.ToOADate())// && x.MeasureTime.Hour == y.MeasureTime.Hour && x.MeasureTime.Minute == y.MeasureTime.Minute)
{
System.Console.WriteLine("Test");
}
return ret == 0;
}
public int GetHashCode(SensorValue obj)
{
return obj.MeasureTime.GetHashCode();
}
}
任何人都可以帮助解决为什么这个Union功能没有正确合并重复项?我使用不正确吗?
干杯
答案 0 :(得分:0)
我通过使用Linq语句而不是Union解决了这个问题。我不得不重新分组,因为之前的方法没有产生精确到minuite的时间:
//merge Data
var mergedData = (nullData.Concat(AveragedData)
.GroupBy(x => {
return new DateTime(x.MeasureTime.Year, x.MeasureTime.Month, x.MeasureTime.Day,
x.MeasureTime.Hour, x.MeasureTime.Minute, 0);
})
.Select(g => new SensorValue
{
MeasureTime = g.Key,
Value = g.Max(x => x.Value)
}).OrderBy(x => x.MeasureTime)).ToList();