

{"id":13109,"date":"2021-06-08T12:56:08","date_gmt":"2021-06-08T17:56:08","guid":{"rendered":"https:\/\/rud.is\/b\/?p=13109"},"modified":"2021-06-08T12:57:09","modified_gmt":"2021-06-08T17:57:09","slug":"new-tabulardata-available-in-swift-on-macos-monterery-et-al","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/","title":{"rendered":"New TabularData Available in Swift on macOS Monterery (et al)"},"content":{"rendered":"<p>WWDC 2021 is on this week and many new fun things are being introduced, including some data science-friendly additions to the frameworks that come with Xcode 13 and available on macOS 12+ (and its *OS cousins).<\/p>\n<p>Specifically, Apple has made tabular data a first-class citizen with the new <a href=\"https:\/\/developer.apple.com\/documentation\/tabulardata\">TabularData<\/a> app service.<\/p>\n<p>A future post will have some more expository, but here&#8217;s a sample of core operations including:<\/p>\n<ul>\n<li>reading in tabular data from CSV or JSON<\/li>\n<li>examining the structure<\/li>\n<li>working with columns and\/or rows<\/li>\n<li>grouping and filtering operations<\/li>\n<li>transforming and removing columns<\/li>\n<\/ul>\n<p>I&#8217;ve tagged this with <code>rstats<\/code> as there are R equivalents included for each operation so R folks can translate any Swift code they see in the future.<\/p>\n<pre><code class=\"language-swift\">import TabularData\n\n\/\/ define some basic formatting options for data frame output\nlet dOpts = FormattingOptions(maximumLineWidth: 80, maximumCellWidth: 10, maximumRowCount: 20, includesColumnTypes: true)\n\n\/\/ read in a CSV file\n\/\/ R: xdf &lt;- read.csv(\"mtcars.csv\")\nvar xdf = try! DataFrame.init(contentsOfCSVFile: URL(fileURLWithPath: \"mtcars.csv\"))\n\n\/\/ take a look at it\n\/\/ R: print(xdf) # no more print() in further R equivalents; just assume interactive or wrap with print\nprint(xdf.description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0  \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 1  \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 2  \u2502 22.8     \u2502 4     \u2502 108.0    \u2502 93    \u2502 3.85     \u2502 2.32     \u2502      \u2506\n\u2502 3  \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2502 4  \u2502 18.7     \u2502 8     \u2502 360.0    \u2502 175   \u2502 3.15     \u2502 3.44     \u2502      \u2506\n\u2502 5  \u2502 18.1     \u2502 6     \u2502 225.0    \u2502 105   \u2502 2.76     \u2502 3.46     \u2502      \u2506\n\u2502 6  \u2502 14.3     \u2502 8     \u2502 360.0    \u2502 245   \u2502 3.21     \u2502 3.57     \u2502      \u2506\n\u2502 7  \u2502 24.4     \u2502 4     \u2502 146.7    \u2502 62    \u2502 3.69     \u2502 3.19     \u2502      \u2506\n\u2502 8  \u2502 22.8     \u2502 4     \u2502 140.8    \u2502 95    \u2502 3.92     \u2502 3.15     \u2502      \u2506\n\u2502 9  \u2502 19.2     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 10 \u2502 17.8     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 11 \u2502 16.4     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 4.07     \u2502      \u2506\n\u2502 12 \u2502 17.3     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 3.73     \u2502      \u2506\n\u2502 13 \u2502 15.2     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 3.78     \u2502      \u2506\n\u2502 14 \u2502 10.4     \u2502 8     \u2502 472.0    \u2502 205   \u2502 2.93     \u2502 5.25     \u2502      \u2506\n\u2502 15 \u2502 10.4     \u2502 8     \u2502 460.0    \u2502 215   \u2502 3.0      \u2502 5.424    \u2502      \u2506\n\u2502 16 \u2502 14.7     \u2502 8     \u2502 440.0    \u2502 230   \u2502 3.23     \u2502 5.345    \u2502      \u2506\n\u2502 17 \u2502 32.4     \u2502 4     \u2502 78.7     \u2502 66    \u2502 4.08     \u2502 2.2      \u2502      \u2506\n\u2502 18 \u2502 30.4     \u2502 4     \u2502 75.7     \u2502 52    \u2502 4.93     \u2502 1.615    \u2502      \u2506\n\u2502 19 \u2502 33.9     \u2502 4     \u2502 71.1     \u2502 65    \u2502 4.22     \u2502 1.835    \u2502      \u2506\n\u2522\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 12 more                                                               \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ dimensions\n\/\/ R: dim(xdf)\nprint(xdf.shape)\n\n(rows: 32, columns: 11)\n\n\/\/ head\n\/\/ R: head(xdf)\nprint(xdf.prefix(5).description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503   \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 1 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 2 \u2502 22.8     \u2502 4     \u2502 108.0    \u2502 93    \u2502 3.85     \u2502 2.32     \u2502      \u2506\n\u2502 3 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2502 4 \u2502 18.7     \u2502 8     \u2502 360.0    \u2502 175   \u2502 3.15     \u2502 3.44     \u2502      \u2506\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u254c\u254c\u254c\u254c\u254c\u254c\u2518\n\n\/\/ tail\n\/\/ R: tail(xdf)\nprint(xdf.suffix(5).description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 27 \u2502 30.4     \u2502 4     \u2502 95.1     \u2502 113   \u2502 3.77     \u2502 1.513    \u2502      \u2506\n\u2502 28 \u2502 15.8     \u2502 8     \u2502 351.0    \u2502 264   \u2502 4.22     \u2502 3.17     \u2502      \u2506\n\u2502 29 \u2502 19.7     \u2502 6     \u2502 145.0    \u2502 175   \u2502 3.62     \u2502 2.77     \u2502      \u2506\n\u2502 30 \u2502 15.0     \u2502 8     \u2502 301.0    \u2502 335   \u2502 3.54     \u2502 3.57     \u2502      \u2506\n\u2502 31 \u2502 21.4     \u2502 4     \u2502 121.0    \u2502 109   \u2502 4.11     \u2502 2.78     \u2502      \u2506\n\u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u254c\u254c\u254c\u254c\u254c\u254c\u2518\n\n\/\/ column summaries\n\/\/ summary(xdf)\nprint(xdf.summaryOfAllColumns().description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 count(mpg) \u2503 uniqueCou\u2026 \u2503 top(mpg) \u2503 topFreque\u2026 \u2503 count(cyl) \u2503 39   \u2507\n\u2503   \u2503 &lt;Int&gt;      \u2503 &lt;Int&gt;      \u2503 &lt;Double&gt; \u2503 &lt;Int&gt;      \u2503 &lt;Int&gt;      \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 32         \u2502 25         \u2502 21.4     \u2502 2          \u2502 32         \u2502      \u2506\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u254c\u254c\u254c\u254c\u254c\u254c\u2518\n\n\/\/ sort it\n\/\/ R: library(tidyverse) # assume this going forward for R examples\n\/\/ R: arrange(xdf, cyl)\nxdf.sort(on: \"cyl\")\n\nprint(xdf.description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0  \u2502 22.8     \u2502 4     \u2502 108.0    \u2502 93    \u2502 3.85     \u2502 2.32     \u2502      \u2506\n\u2502 1  \u2502 24.4     \u2502 4     \u2502 146.7    \u2502 62    \u2502 3.69     \u2502 3.19     \u2502      \u2506\n\u2502 2  \u2502 22.8     \u2502 4     \u2502 140.8    \u2502 95    \u2502 3.92     \u2502 3.15     \u2502      \u2506\n\u2502 3  \u2502 32.4     \u2502 4     \u2502 78.7     \u2502 66    \u2502 4.08     \u2502 2.2      \u2502      \u2506\n\u2502 4  \u2502 30.4     \u2502 4     \u2502 75.7     \u2502 52    \u2502 4.93     \u2502 1.615    \u2502      \u2506\n\u2502 5  \u2502 33.9     \u2502 4     \u2502 71.1     \u2502 65    \u2502 4.22     \u2502 1.835    \u2502      \u2506\n\u2502 6  \u2502 21.5     \u2502 4     \u2502 120.1    \u2502 97    \u2502 3.7      \u2502 2.465    \u2502      \u2506\n\u2502 7  \u2502 27.3     \u2502 4     \u2502 79.0     \u2502 66    \u2502 4.08     \u2502 1.935    \u2502      \u2506\n\u2502 8  \u2502 26.0     \u2502 4     \u2502 120.3    \u2502 91    \u2502 4.43     \u2502 2.14     \u2502      \u2506\n\u2502 9  \u2502 30.4     \u2502 4     \u2502 95.1     \u2502 113   \u2502 3.77     \u2502 1.513    \u2502      \u2506\n\u2502 10 \u2502 21.4     \u2502 4     \u2502 121.0    \u2502 109   \u2502 4.11     \u2502 2.78     \u2502      \u2506\n\u2502 11 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 12 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 13 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2502 14 \u2502 18.1     \u2502 6     \u2502 225.0    \u2502 105   \u2502 2.76     \u2502 3.46     \u2502      \u2506\n\u2502 15 \u2502 19.2     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 16 \u2502 17.8     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 17 \u2502 19.7     \u2502 6     \u2502 145.0    \u2502 175   \u2502 3.62     \u2502 2.77     \u2502      \u2506\n\u2502 18 \u2502 18.7     \u2502 8     \u2502 360.0    \u2502 175   \u2502 3.15     \u2502 3.44     \u2502      \u2506\n\u2502 19 \u2502 14.3     \u2502 8     \u2502 360.0    \u2502 245   \u2502 3.21     \u2502 3.57     \u2502      \u2506\n\u2522\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 12 more                                                               \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ read in a JSON File\n\/\/ R: xdf2 &lt;- jsonlite::fromJSON(\"mtcars.json\")\nvar xdf2 = try! DataFrame.init(contentsOfJSONFile: URL(fileURLWithPath: \"mtcars.json\"))\n\n\/\/ bind the rows together\n\/\/ R: xdf &lt;- bind_rows(xdf, xdf2)\nxdf.append(xdf2)\n\n\/\/ get the new summary\n\/\/ R: summary(xdf)\nprint(xdf.summaryOfAllColumns().description(options: dOpts))\n\n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 count(mpg) \u2503 uniqueCou\u2026 \u2503 top(mpg) \u2503 topFreque\u2026 \u2503 count(cyl) \u2503 39   \u2507\n\u2503   \u2503 &lt;Int&gt;      \u2503 &lt;Int&gt;      \u2503 &lt;Double&gt; \u2503 &lt;Int&gt;      \u2503 &lt;Int&gt;      \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 64         \u2502 25         \u2502 21.4     \u2502 4          \u2502 64         \u2502      \u2506\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u254c\u254c\u254c\u254c\u254c\u254c\u2518\n\n\/\/ basic filtering\n\/\/ R: xdf.filter(cyl == 6)\nprint( xdf.filter(on: \"cyl\", Int.self) { (val) in val == 6 } )\n\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 11 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 12 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 13 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2502 14 \u2502 18.1     \u2502 6     \u2502 225.0    \u2502 105   \u2502 2.76     \u2502 3.46     \u2502      \u2506\n\u2502 15 \u2502 19.2     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 16 \u2502 17.8     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 17 \u2502 19.7     \u2502 6     \u2502 145.0    \u2502 175   \u2502 3.62     \u2502 2.77     \u2502      \u2506\n\u2502 32 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 33 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 35 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2522\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 4 more                                                                \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ group by a column\n\/\/ R: group_by(xdf, cyl)\nprint(xdf.grouped(by: \"cyl\"))\n\n4\n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503   \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 22.8     \u2502 4     \u2502 108.0    \u2502 93    \u2502 3.85     \u2502 2.32     \u2502      \u2506\n\u2502 1 \u2502 24.4     \u2502 4     \u2502 146.7    \u2502 62    \u2502 3.69     \u2502 3.19     \u2502      \u2506\n\u2502 2 \u2502 22.8     \u2502 4     \u2502 140.8    \u2502 95    \u2502 3.92     \u2502 3.15     \u2502      \u2506\n\u2502 3 \u2502 32.4     \u2502 4     \u2502 78.7     \u2502 66    \u2502 4.08     \u2502 2.2      \u2502      \u2506\n\u2502 4 \u2502 30.4     \u2502 4     \u2502 75.7     \u2502 52    \u2502 4.93     \u2502 1.615    \u2502      \u2506\n\u2502 5 \u2502 33.9     \u2502 4     \u2502 71.1     \u2502 65    \u2502 4.22     \u2502 1.835    \u2502      \u2506\n\u2502 6 \u2502 21.5     \u2502 4     \u2502 120.1    \u2502 97    \u2502 3.7      \u2502 2.465    \u2502      \u2506\n\u2502 7 \u2502 27.3     \u2502 4     \u2502 79.0     \u2502 66    \u2502 4.08     \u2502 1.935    \u2502      \u2506\n\u2502 8 \u2502 26.0     \u2502 4     \u2502 120.3    \u2502 91    \u2502 4.43     \u2502 2.14     \u2502      \u2506\n\u2502 9 \u2502 30.4     \u2502 4     \u2502 95.1     \u2502 113   \u2502 3.77     \u2502 1.513    \u2502      \u2506\n\u2522\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 12 more                                                              \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n6\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 11 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 12 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 13 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2502 14 \u2502 18.1     \u2502 6     \u2502 225.0    \u2502 105   \u2502 2.76     \u2502 3.46     \u2502      \u2506\n\u2502 15 \u2502 19.2     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 16 \u2502 17.8     \u2502 6     \u2502 167.6    \u2502 123   \u2502 3.92     \u2502 3.44     \u2502      \u2506\n\u2502 17 \u2502 19.7     \u2502 6     \u2502 145.0    \u2502 175   \u2502 3.62     \u2502 2.77     \u2502      \u2506\n\u2502 32 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.62     \u2502      \u2506\n\u2502 33 \u2502 21.0     \u2502 6     \u2502 160.0    \u2502 110   \u2502 3.9      \u2502 2.875    \u2502      \u2506\n\u2502 35 \u2502 21.4     \u2502 6     \u2502 258.0    \u2502 110   \u2502 3.08     \u2502 3.215    \u2502      \u2506\n\u2522\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 4 more                                                                \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n8\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 mpg      \u2503 cyl   \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 5    \u2507\n\u2503    \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 18 \u2502 18.7     \u2502 8     \u2502 360.0    \u2502 175   \u2502 3.15     \u2502 3.44     \u2502      \u2506\n\u2502 19 \u2502 14.3     \u2502 8     \u2502 360.0    \u2502 245   \u2502 3.21     \u2502 3.57     \u2502      \u2506\n\u2502 20 \u2502 16.4     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 4.07     \u2502      \u2506\n\u2502 21 \u2502 17.3     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 3.73     \u2502      \u2506\n\u2502 22 \u2502 15.2     \u2502 8     \u2502 275.8    \u2502 180   \u2502 3.07     \u2502 3.78     \u2502      \u2506\n\u2502 23 \u2502 10.4     \u2502 8     \u2502 472.0    \u2502 205   \u2502 2.93     \u2502 5.25     \u2502      \u2506\n\u2502 24 \u2502 10.4     \u2502 8     \u2502 460.0    \u2502 215   \u2502 3.0      \u2502 5.424    \u2502      \u2506\n\u2502 25 \u2502 14.7     \u2502 8     \u2502 440.0    \u2502 230   \u2502 3.23     \u2502 5.345    \u2502      \u2506\n\u2502 26 \u2502 15.5     \u2502 8     \u2502 318.0    \u2502 150   \u2502 2.76     \u2502 3.52     \u2502      \u2506\n\u2502 27 \u2502 15.2     \u2502 8     \u2502 304.0    \u2502 150   \u2502 3.15     \u2502 3.435    \u2502      \u2506\n\u2522\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 18 more                                                               \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ number of groups\n\/\/ R: group_by(xdf, cyl) %&gt;% group_keys() %&gt;% nrow()\nprint(xdf.grouped(by: \"cyl\").count)\n\n3\n\n\/\/ group, manipulate (in this case, filter), and re-combine\n\/\/ R: group_by(xdf) %&gt;% filter(mpg &lt; 20) %&gt;% ungroup()\nprint(\n  xdf.grouped(by: \"cyl\").mapGroups { (val) in\n    val.filter(on: \"mpg\", Double.self) { (val) in val! &lt; 20 }.base\n  }.ungrouped()\n)\n\n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 mpg      \u2503 disp     \u2503 hp    \u2503 drat     \u2503 wt       \u2503 qsec     \u2503 5    \u2507\n\u2503   \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Int&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 22.8     \u2502 108.0    \u2502 93    \u2502 3.85     \u2502 2.32     \u2502 18.61    \u2502      \u2506\n\u2502 1 \u2502 24.4     \u2502 146.7    \u2502 62    \u2502 3.69     \u2502 3.19     \u2502 20.0     \u2502      \u2506\n\u2502 2 \u2502 22.8     \u2502 140.8    \u2502 95    \u2502 3.92     \u2502 3.15     \u2502 22.9     \u2502      \u2506\n\u2502 3 \u2502 32.4     \u2502 78.7     \u2502 66    \u2502 4.08     \u2502 2.2      \u2502 19.47    \u2502      \u2506\n\u2502 4 \u2502 30.4     \u2502 75.7     \u2502 52    \u2502 4.93     \u2502 1.615    \u2502 18.52    \u2502      \u2506\n\u2502 5 \u2502 33.9     \u2502 71.1     \u2502 65    \u2502 4.22     \u2502 1.835    \u2502 19.9     \u2502      \u2506\n\u2502 6 \u2502 21.5     \u2502 120.1    \u2502 97    \u2502 3.7      \u2502 2.465    \u2502 20.01    \u2502      \u2506\n\u2502 7 \u2502 27.3     \u2502 79.0     \u2502 66    \u2502 4.08     \u2502 1.935    \u2502 18.9     \u2502      \u2506\n\u2502 8 \u2502 26.0     \u2502 120.3    \u2502 91    \u2502 4.43     \u2502 2.14     \u2502 16.7     \u2502      \u2506\n\u2502 9 \u2502 30.4     \u2502 95.1     \u2502 113   \u2502 3.77     \u2502 1.513    \u2502 16.9     \u2502      \u2506\n\u2522\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 182 more                                                                \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ look at one column\n\/\/ R: xdf$cyl\nprint( xdf[\"cyl\"] )\n\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 cyl   \u2503\n\u2503 &lt;Int&gt; \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2502 4     \u2502\n\u2522\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 54 m\u2026 \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ combine two columns and look at it\n\/\/ R: mutate(xdf, cyl_mpg = sprintf(\"%s:%s\", cyl, mpg) %&gt;% select(-cyl, -mpg)\n\/\/ R: unite(xdf, cyl_mpg, cyl, mpg, sep = \":\") # alternate way\nxdf.combineColumns(\"cyl\", \"mpg\", into: \"cyl_mpg\") { (val1: Int?, val2: Double?) -&gt; String in\n  String(val1 ?? 0) + \":\" + String(val2 ?? 0.0)\n}\n\nprint(xdf[\"cyl_mpg\"])\n\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 cyl_mpg  \u2503\n\u2503 &lt;String&gt; \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 4:22.8   \u2502\n\u2502 4:24.4   \u2502\n\u2502 4:22.8   \u2502\n\u2502 4:32.4   \u2502\n\u2502 4:30.4   \u2502\n\u2502 4:33.9   \u2502\n\u2502 4:21.5   \u2502\n\u2502 4:27.3   \u2502\n\u2502 4:26.0   \u2502\n\u2502 4:30.4   \u2502\n\u2522\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 54 more  \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ look at the colnames (^^ removes \"cyl\" and \"mpg\"\n\/\/ R: colnames(xdf)\nprint(xdf.columns.map{ col in col.name })\n\n[\"cyl_mpg\", \"disp\", \"hp\", \"drat\", \"wt\", \"qsec\", \"vs\", \"am\", \"gear\", \"carb\"]\n\n\/\/ turn an Int into a Double\n\/\/ R: xdf$hp &lt;- as.double(xdf$hp) # or use dplyr::mutate()\nxdf.transformColumn(\"hp\") { (val1: Int?) -&gt; Double? in\n  Double(val1 ?? 0)\n}\n\nprint(xdf[\"hp\"])\n\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 hp       \u2503\n\u2503 &lt;Double&gt; \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 93.0     \u2502\n\u2502 62.0     \u2502\n\u2502 95.0     \u2502\n\u2502 66.0     \u2502\n\u2502 52.0     \u2502\n\u2502 65.0     \u2502\n\u2502 97.0     \u2502\n\u2502 66.0     \u2502\n\u2502 91.0     \u2502\n\u2502 113.0    \u2502\n\u2522\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 54 more  \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ look at the coltypes\n\/\/ R: sapply(mtcars, typeof)\nprint(xdf.columns.map{ col in col.wrappedElementType })\n\n[Swift.String, Swift.Double, Swift.Double, Swift.Double, Swift.Double, Swift.Double, Swift.Int, Swift.Int, Swift.Int, Swift.Int]\n\n\/\/ distinct horsepower\n\/\/ R: distinct(xdf, hp)\nprint(xdf[\"hp\"].distinct())\n\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 hp       \u2503\n\u2503 &lt;Double&gt; \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 93.0     \u2502\n\u2502 62.0     \u2502\n\u2502 95.0     \u2502\n\u2502 66.0     \u2502\n\u2502 52.0     \u2502\n\u2502 65.0     \u2502\n\u2502 97.0     \u2502\n\u2502 91.0     \u2502\n\u2502 113.0    \u2502\n\u2502 109.0    \u2502\n\u2522\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 12 more  \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n\n\/\/ row slices\n\/\/ R: xdf[10,]\nprint(xdf.rows[10])\n\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503    \u2503 cyl_mpg  \u2503 disp     \u2503 hp       \u2503 drat     \u2503 wt       \u2503 qsec     \u2503 4    \u2507\n\u2503    \u2503 &lt;String&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 10 \u2502 4:21.4   \u2502 121.0    \u2502 109.0    \u2502 4.11     \u2502 2.78     \u2502 18.6     \u2502      \u2506\n\u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u254c\u254c\u254c\u254c\u254c\u254c\u2518\n\n\/\/ R: xdf[3:10,]\nprint(xdf.rows[3...10])\n\nRows(base: \n\u250f\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u254d\u254d\u254d\u254d\u254d\u254d\u2513\n\u2503   \u2503 cyl_mpg  \u2503 disp     \u2503 hp       \u2503 drat     \u2503 wt       \u2503 qsec     \u2503 4    \u2507\n\u2503   \u2503 &lt;String&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 &lt;Double&gt; \u2503 more \u2507\n\u2521\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u254d\u254d\u254d\u254d\u254d\u254d\u2529\n\u2502 0 \u2502 4:22.8   \u2502 108.0    \u2502 93.0     \u2502 3.85     \u2502 2.32     \u2502 18.61    \u2502      \u2506\n\u2502 1 \u2502 4:24.4   \u2502 146.7    \u2502 62.0     \u2502 3.69     \u2502 3.19     \u2502 20.0     \u2502      \u2506\n\u2502 2 \u2502 4:22.8   \u2502 140.8    \u2502 95.0     \u2502 3.92     \u2502 3.15     \u2502 22.9     \u2502      \u2506\n\u2502 3 \u2502 4:32.4   \u2502 78.7     \u2502 66.0     \u2502 4.08     \u2502 2.2      \u2502 19.47    \u2502      \u2506\n\u2502 4 \u2502 4:30.4   \u2502 75.7     \u2502 52.0     \u2502 4.93     \u2502 1.615    \u2502 18.52    \u2502      \u2506\n\u2502 5 \u2502 4:33.9   \u2502 71.1     \u2502 65.0     \u2502 4.22     \u2502 1.835    \u2502 19.9     \u2502      \u2506\n\u2502 6 \u2502 4:21.5   \u2502 120.1    \u2502 97.0     \u2502 3.7      \u2502 2.465    \u2502 20.01    \u2502      \u2506\n\u2502 7 \u2502 4:27.3   \u2502 79.0     \u2502 66.0     \u2502 4.08     \u2502 1.935    \u2502 18.9     \u2502      \u2506\n\u2502 8 \u2502 4:26.0   \u2502 120.3    \u2502 91.0     \u2502 4.43     \u2502 2.14     \u2502 16.7     \u2502      \u2506\n\u2502 9 \u2502 4:30.4   \u2502 95.1     \u2502 113.0    \u2502 3.77     \u2502 1.513    \u2502 16.9     \u2502      \u2506\n\u2522\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u2537\u254d\u254d\u254d\u254d\u254d\u254d\u252a\n\u2507 54 more                                                                    \u2507\n\u2517\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u254d\u251b\n, subranges: _RangeSet(3..&lt;11))\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>WWDC 2021 is on this week and many new fun things are being introduced, including some data science-friendly additions to the frameworks that come with Xcode 13 and available on macOS 12+ (and its *OS cousins). Specifically, Apple has made tabular data a first-class citizen with the new TabularData app service. A future post will [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[663,780,91,830],"tags":[],"class_list":["post-13109","post","type-post","status-publish","format-standard","hentry","category-apple","category-macos","category-r","category-swift"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New TabularData Available in Swift on macOS Monterery (et al) - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New TabularData Available in Swift on macOS Monterery (et al) - rud.is\" \/>\n<meta property=\"og:description\" content=\"WWDC 2021 is on this week and many new fun things are being introduced, including some data science-friendly additions to the frameworks that come with Xcode 13 and available on macOS 12+ (and its *OS cousins). Specifically, Apple has made tabular data a first-class citizen with the new TabularData app service. A future post will [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-08T17:56:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-08T17:57:09+00:00\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"New TabularData Available in Swift on macOS Monterery (et al)\",\"datePublished\":\"2021-06-08T17:56:08+00:00\",\"dateModified\":\"2021-06-08T17:57:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\"},\"wordCount\":127,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"Apple\",\"macOS\",\"R\",\"Swift\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\",\"url\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\",\"name\":\"New TabularData Available in Swift on macOS Monterery (et al) - rud.is\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/#website\"},\"datePublished\":\"2021-06-08T17:56:08+00:00\",\"dateModified\":\"2021-06-08T17:57:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/rud.is\/b\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New TabularData Available in Swift on macOS Monterery (et al)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/rud.is\/b\/#website\",\"url\":\"https:\/\/rud.is\/b\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/rud.is\/b\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\/\/rud.is\"],\"url\":\"https:\/\/rud.is\/b\/author\/hrbrmstr\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New TabularData Available in Swift on macOS Monterery (et al) - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/","og_locale":"en_US","og_type":"article","og_title":"New TabularData Available in Swift on macOS Monterery (et al) - rud.is","og_description":"WWDC 2021 is on this week and many new fun things are being introduced, including some data science-friendly additions to the frameworks that come with Xcode 13 and available on macOS 12+ (and its *OS cousins). Specifically, Apple has made tabular data a first-class citizen with the new TabularData app service. A future post will [&hellip;]","og_url":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/","og_site_name":"rud.is","article_published_time":"2021-06-08T17:56:08+00:00","article_modified_time":"2021-06-08T17:57:09+00:00","author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"New TabularData Available in Swift on macOS Monterery (et al)","datePublished":"2021-06-08T17:56:08+00:00","dateModified":"2021-06-08T17:57:09+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/"},"wordCount":127,"commentCount":2,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["Apple","macOS","R","Swift"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/","url":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/","name":"New TabularData Available in Swift on macOS Monterery (et al) - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2021-06-08T17:56:08+00:00","dateModified":"2021-06-08T17:57:09+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2021\/06\/08\/new-tabulardata-available-in-swift-on-macos-monterery-et-al\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"New TabularData Available in Swift on macOS Monterery (et al)"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-3pr","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":12878,"url":"https:\/\/rud.is\/b\/2021\/01\/16\/new-swiftr-chapter-up-building-an-r-backed-swiftui-macos-app\/","url_meta":{"origin":13109,"position":0},"title":"New SwiftR Chapter Up: Building an R-backed SwiftUI macOS App","author":"hrbrmstr","date":"2021-01-16","format":false,"excerpt":"Last week I introduced a new bookdown series on how to embed R into a macOS Swift application. The initial chapters focused on core concepts and showed how to build a macOS compiled, binary command line application that uses embedded R for some functionality. This week, a new chapter is\u2026","rel":"","context":"In &quot;Apple&quot;","block_context":{"text":"Apple","link":"https:\/\/rud.is\/b\/category\/apple\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12866,"url":"https:\/\/rud.is\/b\/2021\/01\/04\/bringing-r-to-swift-on-macos\/","url_meta":{"origin":13109,"position":1},"title":"Bringing R to Swift on macOS","author":"hrbrmstr","date":"2021-01-04","format":false,"excerpt":"Over Christmas break I teased some screencaps: A more refined #rstats #swift \"SwiftR\" example. Simple Image view + some text views, a color picker and a button that runs R-in-Swift code (like {reticulate} does for Python in R)Note no ssd\/hd storage round-trip for the plot.Code snippet: https:\/\/t.co\/fWaHnztUgd pic.twitter.com\/y5m1I16tCB\u2014 Caliban's War\u2026","rel":"","context":"In &quot;Apple&quot;","block_context":{"text":"Apple","link":"https:\/\/rud.is\/b\/category\/apple\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12459,"url":"https:\/\/rud.is\/b\/2019\/08\/26\/rswitch-1-4-0-released\/","url_meta":{"origin":13109,"position":2},"title":"RSwitch 1.4.0 Released","author":"hrbrmstr","date":"2019-08-26","format":false,"excerpt":"Swift 5 has been so much fun to hack on that there's a new update to macOS R-focused mebubar utility RSwitch available. Along with the app comes a new dedicated RSwitch landing page and a new user's guide since it has enough features to warrant such documentation. Here's the new\u2026","rel":"","context":"In &quot;Apple&quot;","block_context":{"text":"Apple","link":"https:\/\/rud.is\/b\/category\/apple\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12438,"url":"https:\/\/rud.is\/b\/2019\/08\/22\/quick-hit-a-new-64-bit-swift-5-rswitch-app\/","url_meta":{"origin":13109,"position":3},"title":"Quick Hit: A new 64-bit Swift 5 RSwitch App","author":"hrbrmstr","date":"2019-08-22","format":false,"excerpt":"At the bottom of the R for macOS Developer's Page there's mention of an \"other binary\" called \"RSwitch\" that is \"a small GUI that allows you to switch between R versions quickly (if you have multiple versions of R framework installed).\" Said switching requires you to use the \"tar.gz\" versions\u2026","rel":"","context":"In &quot;Apple&quot;","block_context":{"text":"Apple","link":"https:\/\/rud.is\/b\/category\/apple\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12891,"url":"https:\/\/rud.is\/b\/2021\/01\/23\/swiftr-switcheroo-calling-compiled-swift-from-r\/","url_meta":{"origin":13109,"position":4},"title":"SwiftR Switcheroo: Calling [Compiled] Swift from R!","author":"hrbrmstr","date":"2021-01-23","format":false,"excerpt":"I've been on a Swift + R bender for a while now, but have been envious of the pure macOS\/iOS (et al) folks who get to use Apple's seriously ++good machine learning libraries, which are even more robust on the new M1 hardware (it's cool having hardware components dedicated to\u2026","rel":"","context":"In &quot;macOS&quot;","block_context":{"text":"macOS","link":"https:\/\/rud.is\/b\/category\/macos\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":13039,"url":"https:\/\/rud.is\/b\/2021\/04\/24\/making-macos-universal-apps-with-universal-golang-static-libraries\/","url_meta":{"origin":13109,"position":5},"title":"Making macOS Universal Apps in Swift with Universal Golang Static Libraries","author":"hrbrmstr","date":"2021-04-24","format":false,"excerpt":"There are a plethora of amazingly useful Golang libraries, and it has been possible for quite some time to use Go libraries with Swift. The advent of the release of the new Apple Silicon\/M1\/arm64 architecture for macOS created the need for a new round of \"fat\"\/\"universal\" binaries and libraries to\u2026","rel":"","context":"In &quot;Go&quot;","block_context":{"text":"Go","link":"https:\/\/rud.is\/b\/category\/go\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=13109"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13109\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=13109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=13109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=13109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}