From c5ffadd4374eac4473d884bf46135db6e5f369ac Mon Sep 17 00:00:00 2001 From: "sweep-ai[bot]" <128439645+sweep-ai[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 01:34:08 +0000 Subject: [PATCH] feat: Added DataFrame class for SNP data manipulat --- src/Snps/Utils/DataFrame.php | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/Snps/Utils/DataFrame.php diff --git a/src/Snps/Utils/DataFrame.php b/src/Snps/Utils/DataFrame.php new file mode 100644 index 0000000..3546c81 --- /dev/null +++ b/src/Snps/Utils/DataFrame.php @@ -0,0 +1,41 @@ +data = $data; + } + + public function filter(callable $callback): DataFrame { + $filteredData = array_filter($this->data, $callback, ARRAY_FILTER_USE_BOTH); + return new self($filteredData); + } + + public function sort(array $columns, array $directions = []): DataFrame { + $sortedData = $this->data; + usort($sortedData, function ($a, $b) use ($columns, $directions) { + foreach ($columns as $index => $column) { + $direction = $directions[$index] ?? SORT_ASC; + if ($a[$column] == $b[$column]) { + continue; + } + return ($a[$column] < $b[$column]) ? -1 * $direction : 1 * $direction; + } + return 0; + }); + return new self($sortedData); + } + + public function merge(DataFrame $other, string $on, string $type = 'inner'): DataFrame { + // Simplified merge function for demonstration purposes + $mergedData = []; // Implement merging logic based on $type (inner, left, right, outer) + return new self($mergedData); + } + + public function getData(): array { + return $this->data; + } +}