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