MCPcopy Create free account
hub / github.com/KDE/labplot / columnQuantile

Function columnQuantile

src/backend/core/column/ColumnPrivate.cpp:2433–2487  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2431}
2432
2433double columnQuantile(double p, const std::string_view& variable, const std::weak_ptr<Parsing::Payload> payload) {
2434 const auto pd = std::dynamic_pointer_cast<PayloadColumn>(payload.lock());
2435 if (!pd) {
2436 assert(pd); // Debug build
2437 return NAN;
2438 }
2439
2440 if (p < 0)
2441 return NAN;
2442
2443 const Column* column = nullptr;
2444 for (const auto& formulaData : pd->formulaData) {
2445 if (formulaData.variableName().compare(QLatin1String(variable)) == 0) {
2446 column = formulaData.column();
2447 break;
2448 }
2449 }
2450 if (!column)
2451 return NAN;
2452
2453 double value = 0.0;
2454 switch (column->columnMode()) { // all types
2455 case AbstractColumn::ColumnMode::Double: {
2456 auto data = reinterpret_cast<QVector<double>*>(column->data());
2457 value = nsl_stats_quantile(data->data(), 1, column->statistics().size, p, nsl_stats_quantile_type7);
2458 break;
2459 }
2460 case AbstractColumn::ColumnMode::Integer: {
2461 auto* intData = reinterpret_cast<QVector<int>*>(column->data());
2462
2463 QVector<double> data = QVector<double>(); // copy data to double
2464 data.reserve(column->rowCount());
2465 for (auto v : *intData)
2466 data << static_cast<double>(v);
2467 value = nsl_stats_quantile(data.data(), 1, column->statistics().size, p, nsl_stats_quantile_type7);
2468 break;
2469 }
2470 case AbstractColumn::ColumnMode::BigInt: {
2471 auto* bigIntData = reinterpret_cast<QVector<qint64>*>(column->data());
2472
2473 QVector<double> data = QVector<double>(); // copy data to double
2474 data.reserve(column->rowCount());
2475 for (auto v : *bigIntData)
2476 data << static_cast<double>(v);
2477 value = nsl_stats_quantile(data.data(), 1, column->statistics().size, p, nsl_stats_quantile_type7);
2478 break;
2479 }
2480 case AbstractColumn::ColumnMode::DateTime: // not supported yet
2481 case AbstractColumn::ColumnMode::Day:
2482 case AbstractColumn::ColumnMode::Month:
2483 case AbstractColumn::ColumnMode::Text:
2484 break;
2485 }
2486 return value;
2487}
2488
2489double columnPercentile(double p, const std::string_view& variable, const std::weak_ptr<Parsing::Payload> payload) {
2490 return columnQuantile(p / 100., variable, payload);

Callers 1

columnPercentileFunction · 0.85

Calls 7

nsl_stats_quantileFunction · 0.85
statisticsMethod · 0.80
columnMethod · 0.45
columnModeMethod · 0.45
dataMethod · 0.45
reserveMethod · 0.45
rowCountMethod · 0.45

Tested by

no test coverage detected