# segmentby

Syntax

segmentby(func, funcArgs, segment)

Arguments

func is a function.

funcArgs are the parameters of func. It is a tuple if there are more than 1 parameter of func.

segment is the grouping variable.

segment and each of the function argument in funcArgs are vectors of the same size.

Details

`segmentby` is very similar to contextby except for how groups are determined. With `contextby`, a group includes all elements with the same value. With `segmentby`, only a block of equal value elements counts as a group. 2 blocks of equal value elements separated by different values are treated as 2 groups.

Examples

```\$ ret = 0.01 -0.02 0.03 -0.04 0.03 -0.02 0.05 -0.01 0.03 -0.04 0.05 -0.04
\$ position = 1 1 1 1 -1 -1 -1 -1 1 1 1 1
\$ t = table(ret, position);
\$ t;
```

ret

position

0.01

-0.02

1

0.03

1

-0.04

1

0.03

-1

-0.02

-1

0.05

-1

-0.01

-1

0.03

1

-0.04

1

0.05

1

-0.04

1

```\$ update t set cumret=contextby(cumsum, ret, position);
\$ t;
```

ret

position

cumret

0.01

1

0.01

-0.02

1

-0.01

0.03

1

0.02

-0.04

1

-0.02

0.03

-1

0.03

-0.02

-1

0.01

0.05

-1

0.06

-0.01

-1

0.05

0.03

1

0.01

-0.04

1

-0.03

0.05

1

0.02

-0.04

1

-0.02

```\$ update t set cumret=segmentby(cumsum, ret, position);
\$ t;
```

ret

position

cumret

0.01

1

0.01

-0.02

1

-0.01

0.03

1

0.02

-0.04

1

-0.02

0.03

-1

0.03

-0.02

-1

0.01

0.05

-1

0.06

-0.01

-1

0.05

0.03

1

0.03

-0.04

1

-0.01

0.05

1

0.04

-0.04

1

0