Skip to contents

Creates a delta UpdateByOp for each column in cols. The Delta operation computes the difference between the current value and the previous value. When the current value is null, this operation will output null. When the current value is valid, the output will depend on the delta_control provided.

Arguments

cols

String or list of strings denoting the column(s) to operate on. Can be renaming expressions, i.e. “new_col = col”. Default is to apply the delta operation to all non-grouping columns.

delta_control

Defines how the delta operation handles null values. Defaults to 'null_dominates'.

Value

UpdateByOp to be used in a call to update_by().

Details

The delta_control parameter controls how this operation treats null values. It can be one of the following:

  • 'null_dominates': A valid value following a null value returns null.

  • 'value_dominates': A valid value following a null value returns the valid value.

  • 'zero_dominates': A valid value following a null value returns zero.

This function acts on aggregation groups specified with the by parameter of the update_by() caller function. The aggregation groups are defined by the unique combinations of values in the by columns. For example, if by = c("A", "B"), then the aggregation groups are defined by the unique combinations of values in the A and B columns.

This function, like other Deephaven uby functions, is a generator function. That is, its output is another function called an UpdateByOp intended to be used in a call to update_by(). This detail is typically hidden from the user. However, it is important to understand this detail for debugging purposes, as the output of a uby function can otherwise seem unexpected.

For more information, see the vignette on uby functions by running vignette("update_by").

Examples

if (FALSE) { # \dontrun{
library(rdeephaven)

# connecting to Deephaven server
client <- Client$new("localhost:10000", auth_type = "psk", auth_token = "my_secret_token")

# create data frame, push to server, retrieve TableHandle
df <- data.frame(
  timeCol = seq.POSIXt(as.POSIXct(Sys.Date()), as.POSIXct(Sys.Date() + 0.01), by = "1 sec")[1:500],
  boolCol = sample(c(TRUE, FALSE), 500, TRUE),
  col1 = sample(10000, size = 500, replace = TRUE),
  col2 = sample(10000, size = 500, replace = TRUE),
  col3 = 1:500
)
th <- client$import_table(df)

# compute consecutive differences of col1 and col2
th1 <- th$
  update_by(uby_delta(c("col1Delta = col1", "col2Delta = col2")))

# compute consecutive differences of col1 and col2, grouped by boolCol
th2 <- th$
  update_by(uby_delta(c("col1Delta = col1", "col2Delta = col2")), by = "boolCol")

# compute consecutive differences of col1 and col2, grouped by boolCol and parity of col3
th3 <- th$
  update("col3Parity = col3 % 2")$
  update_by(uby_delta(c("col1Delta = col1", "col2Delta = col2")), by = c("boolCol", "col3Parity"))

client$close()
} # }