Apply function to table or timetable variables
applies
the function B = varfun(func,A)func separately to each variable
of the table or timetable A and returns the results
in the table or timetable B.
The function func must take one input argument
and return arrays with the same number of rows each time it is called.
The ith variable in the output argument, B{:,i},
is equal to func(A{:,i}).
If A is a timetable and func aggregates
data over groups of rows, then varfun assigns the
first row time from each group of rows in A as
the corresponding row time in B. To return B as
a table without row times, specify 'OutputFormat' as 'table'.
applies
the function B = varfun(func,A,Name,Value)func separately to each variable of
the table or timetable A with additional options
specified by one or more Name,Value pair arguments.
For example, you can specify which variables to pass to the function.
Define and apply an element-wise function to the variables of a table to square all the elements.
Define a table containing numeric variables.
A = table([0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×2 table
Var1 Var2
_____ _____
0.71 0.23
-2.05 0.12
-0.35 -0.18
-0.82 0.23
1.57 0.41
Define the anonymous function to find the square of an input.
func = @(x) x.^2;
Apply the function to all the variables of table A.
B = varfun(func,A)
B=5×2 table
Fun_Var1 Fun_Var2
________ ________
0.5041 0.0529
4.2025 0.0144
0.1225 0.0324
0.6724 0.0529
2.4649 0.1681
The variables of B have names based on the function and the variable names from A.
Compute the mean of each variable in a 5-by-2 table.
Define a table containing numeric variables.
A = table([0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])
A=5×2 table
Var1 Var2
_____ _____
0.71 0.23
-2.05 0.12
-0.35 -0.18
-0.82 0.23
1.57 0.41
Define the anonymous function to find the mean of an input.
func = @mean;
func uses an existing MATLAB® function to define the operation.
Apply the function to all the variables of table A.
B = varfun(func,A)
B=1×2 table
mean_Var1 mean_Var2
_________ _________
-0.188 0.162
B is a table containing the average value from each variable. To return a numeric vector instead of a table, you can use B = varfun(func,A,'OutputFormat','uniform').
Compute the group-wise means of variables in a table, A, and return them as rows in a table, B.
Create a table where one variable defines groups.
A = table({'test2';'test1';'test2';'test3';'test1'},...
[0.71;-2.05;-0.35;-0.82;1.57],[0.23;0.12;-0.18;0.23;0.41])A=5×3 table
Var1 Var2 Var3
_________ _____ _____
{'test2'} 0.71 0.23
{'test1'} -2.05 0.12
{'test2'} -0.35 -0.18
{'test3'} -0.82 0.23
{'test1'} 1.57 0.41
Define the anonymous function to find the mean of an input.
func = @mean;
func uses an existing MATLAB® function to define the operation.
Apply the function to each group of data defined by Var1.
B = varfun(func,A,'GroupingVariables','Var1')
B=3×4 table
Var1 GroupCount mean_Var2 mean_Var3
_________ __________ _________ _________
{'test1'} 2 -0.24 0.265
{'test2'} 2 0.18 0.025
{'test3'} 1 -0.82 0.23
B contains a variable called GroupCount to indicate the number of entries from table A in that group.
Create a timetable containing sample data. The row times of the timetable also define groups.
dt = datetime(2016,1,1)+days([0 1 1 2 3 3])'; A = timetable(dt,[0.71;-2.05;-0.35;-0.82;1.57;0.09],... [0.23;0.12;-0.18;0.23;0.41;0.02],... 'VariableNames',{'x' 'y'})
A=6×2 timetable
dt x y
___________ _____ _____
01-Jan-2016 0.71 0.23
02-Jan-2016 -2.05 0.12
02-Jan-2016 -0.35 -0.18
03-Jan-2016 -0.82 0.23
04-Jan-2016 1.57 0.41
04-Jan-2016 0.09 0.02
Compute the group-wise means of the variables in the timetable. varfun returns B as a timetable because A is a timetable. When you specify the row times as the grouping variable, you cannot specify any variable as another grouping variable.
B = varfun(@mean,A,'GroupingVariables','dt')
B=4×3 timetable
dt GroupCount mean_x mean_y
___________ __________ ______ ______
01-Jan-2016 1 0.71 0.23
02-Jan-2016 2 -1.2 -0.03
03-Jan-2016 1 -0.82 0.23
04-Jan-2016 2 0.83 0.215
func — FunctionFunction, specified as a function handle. You can define the
function in a file or as an anonymous function. If func corresponds
to more than one function file (that is, if func represents
a set of overloaded functions), MATLAB® determines which function
to call based on the class of the input arguments.
Use the 'OutputFormat','cell' name-value
pair argument, if the function func take one input
argument and returns arrays with a different numbers of rows each
time it is called. Otherwise, func must return
arrays with the same number of rows.
Example: func = @(x) x.^2; computes the square
of each element of an input.
A — Input tableInput table, specified as a table or a timetable.
Specify optional
comma-separated pairs of Name,Value arguments. Name is
the argument name and Value is the corresponding value.
Name must appear inside quotes. You can specify several name and value
pair arguments in any order as
Name1,Value1,...,NameN,ValueN.
'InputVariables',2 uses only the
second variable in A as an input to func.'InputVariables' — Specifiers for selecting variables of A to pass to funcSpecifiers for selecting variables of A to pass to func,
specified as the comma-separated pair consisting of
'InputVariables' and a positive integer, vector
of positive integers, character vector, cell array of character vectors,
string array, logical vector, or a function handle.
If you specify 'InputVariables' as a function
handle, then it must return a logical scalar, and varfun passes
only the variables in A where the function returns 1 (true).
'GroupingVariables' — One or more variables in A that define groups of rowsOne or more variables in A that define groups of rows, specified as the
comma-separated pair consisting of
'GroupingVariables' and a positive integer,
vector of positive integers, character vector, cell array of character
vectors, string array, or logical vector.
The value of 'GroupingVariables' specifies which
table variables are the grouping variables, not their data types. A
grouping variable can be numeric, or have data type
categorical, calendarDuration,
datetime, duration,
logical, or string.
Rows in A that have the same grouping variable
values belong to the same group. varfun applies func to
each group of rows within each of the variables of A,
rather than to each entire variable.
If any grouping variable contains NaNs or missing
values (such as NaTs, undefined categorical values,
or missing strings), then the corresponding rows do not belong to any
group, and are excluded from the output.
Row labels can be grouping variables. You can group on row labels
alone, on one or more variables in A, or on row
labels and variables together.
If A is a table, then the labels
are row names.
If A is a timetable, then the labels
are row times.
The output, B, has one row for each group
when you specify 'OutputFormat','uniform' or 'OutputFormat','cell'.
When you specify 'OutputFormat','table' or 'OutputFormat','timetable',
the sizes of the outputs from func determine how
many rows of B correspond to each group.
'OutputFormat' — Format of B'table' (default) | 'timetable' | 'uniform' | 'cell'Format of B, specified as the comma-separated
pair consisting of 'OutputFormat' and either the
value 'uniform', 'table', 'timetable',
or 'cell'.
|
If |
|
If |
|
|
|
|
'ErrorHandler' — Function to call if func failsFunction to call if func fails, specified
as the comma-separated pair consisting of 'ErrorHandler' and
a function handle. Define this function so that it rethrows the error
or returns valid outputs for function func.
MATLAB calls the specified error-handling function with two input arguments:
A structure with these fields:
| Error identifier. |
| Error message text. |
| Index of the variable for which the error occurred. |
| Name of the variable for which the error occurred. |
The set of input arguments to function func at
the time of the error.
For example,
function [A, B] = errorFunc(S, varargin)
warning(S.identifier, S.message)
A = NaN; B = NaN;This function supports tall arrays with the limitations:
The func input must always return
a tall array.
Supported name-value pairs are:
'InputVariables' — Cannot
be specified as a function handle.
'OutputFormat' — Value can
be 'uniform', 'table', 'timetable',
or 'cell' only.
When the input array is a tall timetable and 'OutputFormat' is 'timetable',
the specified function must return an array with the same size in
the first dimension as the input. Specify 'OutputFormat' as 'table' when
the input function is a reduction function such as mean.
For more information, see Tall Arrays.
Usage notes and limitations:
The function handle input, func, must be
constant.
While function handles can be inputs to varfun
itself, they cannot be inputs to your entry point functions. Specify
func within the code meant for code generation. For
more information, see Function Handle Limitations for Code Generation (MATLAB Coder).
The values for all name-value arguments must be constant.
The 'ErrorHandler' name-value argument is not supported
for code generation.
Variable-size input arguments are not supported.
Grouping variables cannot have duplicate values in generated code.
You cannot specify the value of 'OutputFormat' as
'cell' if you specify the
'GroupingVariables' name-value argument and the
function returns a different data type for each variable specified by
'InputVariables'.
If the input is a timetable and you specify
'GroupingVariables', then the output is always an
irregular timetable.
If you specify groups and the number of groups is not known at compile time, and that number is zero, then empty double variables in the output might have sizes of 1-by-0 in generated code. In MATLAB, such variables have sizes of 0-by-0.
arrayfun | cellfun | convertvars | findgroups | groupsummary | rowfun | splitapply | structfun | vartype
You have a modified version of this example. Do you want to open this example with your edits?