В этом примере показано, как выполнять вычисления для таблиц.
Функции rowfun и varfun каждая применяет определенную функцию к таблице, но многие другие функции требуют числовых или однородных массивов в качестве входных аргументов. Можно извлечь данные из отдельных переменных с помощью точечного индексирования или из одной или нескольких переменных с помощью фигурных скобок. Извлеченные данные представляют собой массив, который можно использовать в качестве входных данных для других функций. Начиная с R2018a, вы также можете использовать groupsummary функция для вычислений по группам данных в таблице.
Считывание данных из текстового файла, разделенного запятыми, testScores.csv, в таблицу с использованием readtable функция. testScores.csv содержит результаты тестов для нескольких студентов. Используйте имена учеников в первом столбце текстового файла в качестве имен строк в таблице.
T = readtable('testScores.csv','ReadRowNames',true)
T=10×4 table
Gender Test1 Test2 Test3
__________ _____ _____ _____
HOWARD {'male' } 90 87 93
WARD {'male' } 87 85 83
TORRES {'male' } 86 85 88
PETERSON {'female'} 75 80 72
GRAY {'female'} 89 86 87
RAMIREZ {'female'} 96 92 98
JAMES {'male' } 78 75 77
WATSON {'female'} 91 94 92
BROOKS {'female'} 86 83 85
KELLY {'male' } 79 76 82
T - таблица с 10 строками и четырьмя переменными.
Просмотр типа данных, описания, единиц измерения и другой описательной статистики для каждой переменной с помощью summary функция для суммирования таблицы.
summary(T)
Variables:
Gender: 10x1 cell array of character vectors
Test1: 10x1 double
Values:
Min 75
Median 86.5
Max 96
Test2: 10x1 double
Values:
Min 75
Median 85
Max 94
Test3: 10x1 double
Values:
Min 72
Median 86
Max 98
Сводка содержит минимальный, средний и максимальный балл для каждого теста.
Извлеките данные из второй, третьей и четвертой переменных с помощью фигурных скобок, {}, найдите среднее значение каждой строки и сохраните его в новой переменной, TestAvg.
T.TestAvg = mean(T{:,2:end},2)T=10×5 table
Gender Test1 Test2 Test3 TestAvg
__________ _____ _____ _____ _______
HOWARD {'male' } 90 87 93 90
WARD {'male' } 87 85 83 85
TORRES {'male' } 86 85 88 86.333
PETERSON {'female'} 75 80 72 75.667
GRAY {'female'} 89 86 87 87.333
RAMIREZ {'female'} 96 92 98 95.333
JAMES {'male' } 78 75 77 76.667
WATSON {'female'} 91 94 92 92.333
BROOKS {'female'} 86 83 85 84.667
KELLY {'male' } 79 76 82 79
Кроме того, можно использовать имена переменных. T{:,{'Test1','Test2','Test3'}} или индексы переменных, T{:,2:4} для выбора подмножества данных.
Вычислите среднее и максимальное значение TestAvg по полу учащихся. Сначала вычислите средства, используя varfun функция.
varfun(@mean,T,'InputVariables','TestAvg',... 'GroupingVariables','Gender')
ans=2×3 table
Gender GroupCount mean_TestAvg
__________ __________ ____________
{'female'} 5 87.067
{'male' } 5 83.4
Начиная с R2018a, вы также можете использовать groupsummary выполнение вычислений по группам данных в таблице. Вычислить максимальные значения TestAvg для каждой группы студентов, использующих groupsummary.
groupsummary(T,'Gender','max','TestAvg')
ans=2×3 table
Gender GroupCount max_TestAvg
__________ __________ ___________
{'female'} 5 95.333
{'male' } 5 90
Максимальный балл для каждого теста - 100. Используйте фигурные скобки для извлечения данных из таблицы и преобразования результатов теста в 25-балльную шкалу.
T{:,2:end} = T{:,2:end}*25/100T=10×5 table
Gender Test1 Test2 Test3 TestAvg
__________ _____ _____ _____ _______
HOWARD {'male' } 22.5 21.75 23.25 22.5
WARD {'male' } 21.75 21.25 20.75 21.25
TORRES {'male' } 21.5 21.25 22 21.583
PETERSON {'female'} 18.75 20 18 18.917
GRAY {'female'} 22.25 21.5 21.75 21.833
RAMIREZ {'female'} 24 23 24.5 23.833
JAMES {'male' } 19.5 18.75 19.25 19.167
WATSON {'female'} 22.75 23.5 23 23.083
BROOKS {'female'} 21.5 20.75 21.25 21.167
KELLY {'male' } 19.75 19 20.5 19.75
Изменение имени переменной с TestAvg кому Final.
T.Properties.VariableNames{end} = 'Final'T=10×5 table
Gender Test1 Test2 Test3 Final
__________ _____ _____ _____ ______
HOWARD {'male' } 22.5 21.75 23.25 22.5
WARD {'male' } 21.75 21.25 20.75 21.25
TORRES {'male' } 21.5 21.25 22 21.583
PETERSON {'female'} 18.75 20 18 18.917
GRAY {'female'} 22.25 21.5 21.75 21.833
RAMIREZ {'female'} 24 23 24.5 23.833
JAMES {'male' } 19.5 18.75 19.25 19.167
WATSON {'female'} 22.75 23.5 23 23.083
BROOKS {'female'} 21.5 20.75 21.25 21.167
KELLY {'male' } 19.75 19 20.5 19.75
findgroups | groupsummary | rowfun | splitapply | summary | table | varfun