В этом примере показано, как выполнить вычисления в таблицах.
Функции 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/100
T=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