datagrok-calc-column
SkillMonitoring & opsAdd a calculated, formula-based column to a dataframe via the datagrok_exec tool. Use whenever the user asks to compute, derive, add, or create a new column from existing columns — LipE, ratios, log/round, heavy atom count, any expression in the Datagrok formula DSL. Replaces hand-written addNewFloat/addNewInt + for-loop with a single formula-attached column that recomputes when source columns change.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the datagrok-calc-column skill
What this skill tells your AI
The instructions your AI receives, as published by datagrok-ai/public in packages/Grokky/dockerfiles/claude-runtime/plugin/skills/datagrok-calc-column/SKILL.md and read by ahel’s review.
Use t.columns.addNewCalculated(name, formula, type?) in datagrok_exec code
to add a formula-driven column. The formula stays attached to the column,
so edits to source columns trigger automatic recompute.
Do not use t.columns.addNewFloat('LipE') plus a manual for loop — that
produces a static column with no formula and no recompute.
Signature
await t.columns.addNewCalculated(
name, // string
formula, // string — DSL, see below
type?, // 'auto' (default) | 'double' | 'int' | 'string' | 'bool' | 'datetime'
treatAsString?, // boolean — wraps formula in quotes
): Promise<DG.Column>
t is the current DG.DataFrame (injected by datagrok_exec). If you have a
DataFrame from elsewhere, replace t with that variable.
Formula DSL — quick reference
| Form | Meaning |
|---|---|
${ColumnName} | per-row scalar reference, exact case |
$[ColumnName] | whole-column reference (use inside aggregates) |
row | current row index |
+ - * / ^ | operators |
Round, RoundFloat, Log, Log10, Sqrt, Abs | math functions |
Avg($[col]), Sum($[col]), Min($[col]), Max($[col]), StDev($[col]) | aggregates over a whole column |
Max([${A}, ${B}]), Min([${A}, ${B}]) | per-row max / min across columns — the argument is an array |
Chem:getInchis(${molecule}) | only functions tagged vectorFunc: 'true' work here — see Which functions work in a formula |
"text" | string literal (double quotes) |
Both operator and function forms parse: ${pIC50} - ${cLogP} ≡ Sub(${pIC50}, ${cLogP}).
Full function catalog: help/transform/add-new-column.md.
Examples
// Lipophilic efficiency
await t.columns.addNewCalculated('LipE', '${pIC50} - ${cLogP}');
// Log of activity
await t.columns.addNewCalculated('logIC50', 'Log10(${IC50})');
// Per-row maximum of two columns — note the array argument.
await t.columns.addNewCalculated('CS max', 'Max([${Chemical Space X}, ${Chemical Space Y}])');
Which functions work in a formula
A package function (Chem:foo, Admetica:bar, ...) can be used inside an
addNewCalculated formula only if it is tagged vectorFunc: 'true' in its
metadata. Everything else must be called imperatively via
grok.functions.call(...) in a separate datagrok_exec call.
Chem properties → use the chem catalog, not a formula
For molecular properties (MW, LogP, LogS, HBA, HBD, PSA, rotatable bonds,
stereo centers, molecule charge): use Chem:addChemPropertiesColumns (boolean
flags) or Chem:getProperties(molecules, selected?) (string list) — see
datagrok-chem-toolkit. Example:
await grok.functions.call('Chem:addChemPropertiesColumns', {
table: t, molecules: t.col('smiles'), MW: true,
});
What this skill does NOT do
- It does not filter, sort, or select rows — those are separate skills.
- It does not add viewers — use
grok.shell.addViewer(...)or a future viewer skill. - It does not run server-side scripts — use
grok.functions.call(...)or the script's registered name.
Signals
- GitHub stars
- 72
- Forks
- 32
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
datagrok-calc-column- Source
- github.com/datagrok-ai/public