表都有数字和非数字数据时计算
这个例子展示了如何在表中的数据执行计算时均数值和非数值数据。识别表变量包含数值数据之后,您可以访问这些变量中的数据通过使用花括号或点符号。然后你可以对数值型数据执行算术运算或调用函数和分配结果回桌上,一行代码。你也可以使用rowfun
函数计算表的行和varfun
函数计算的变量。如果您的表有组数据,您可以使用groupsummary
,rowfun
,varfun
函数来执行计算每组的表。
样本数据读入表
从CSV(逗号分隔值)读取数据文件,testScores.csv
成一个表使用readtable
函数。样例文件包含10个学生的考试分数上两个不同的学校。输出表包含变量数值数据和其他文本数据的变量。其中一个变量,学校
,有一组固定的值或类别。这些类别表示两组学生在这个表。转换学校
到一个分类
变量。
成绩= readtable (“testScores.csv”,“TextType”,“字符串”);分数。学校= categorical(scores.School)
成绩=10×5表LastName学校Test1 Test2 Test3 __________ __________ _____ _____ _____“宋”某某学校90 87 93”柯林斯“XYZ 87 85 83”托雷斯“某某学校86 85 88“飞利浦”美国广播公司ABC学院89 86 75 80 72“凌”87“Ramirez”ABC学院96 92 98“李”某某学校78 75 77“沃克”美国广播公司ABC学院86 83 91 94 92“加西亚”85“常”某某学校79 76 82
用数值数据创建子表
数值型数据的一个简单的工作方式是创建一个小工作台,只有数值变量。您可以创建一个小工作台通过索引到表中使用括号并指定行和变量。子表是一个新的,较小的表只包含指定的行和变量从旧表。
例如,创建的子表分数
只有考试成绩。因为前两个变量有非数字数据,您可以索引到这个表指定其他变量。
numericScores =分数(:,3:结束)
numericScores =10×3表Test1 Test2 Test3 _____ _____ _____ 90 87 93 87 85 83 86 85 88 75 80 72 89 86 87 96 92 98 78 75 77 91 94 92 86 83 85 79 76 82
另一种方法是使用指定变量vartype
函数来指定它们的数据类型。这个函数是非常有用的,当你有一个大桌子和许多具有不同数据类型的变量。它返回一个下标变量,您可以使用它来指定表。
numericVars = vartype (“数字”)
numericVars =表vartype下标:选择表变量匹配类型的数字”看到表中访问数据。
numericScores =分数(:,numericVars)
numericScores =10×3表Test1 Test2 Test3 _____ _____ _____ 90 87 93 87 85 83 86 85 88 75 80 72 89 86 87 96 92 98 78 75 77 91 94 92 86 83 85 79 76 82
子表只有数字数据时计算
(因为R2023a)你可以直接在一个表上执行操作,只要所有的变量的数据类型支持的操作。金宝app有关更多信息,请参见直接计算表和时间表。
例如,规模数值数据25点规模的考试成绩。
numericScores = numericScores。* 0.25
numericScores =10×3表Test1 Test2 Test3 _____ _____ _____ 22 22.5 21.75 23.25 21.75 21.25 20.75 21.5 21.25 18.75 20日18 22.25 21.5 21.75 24 23日23 24.5 19.5 18.75 19.25 22.75 23.5 21.5 20.75 21.25 19.75 20.5 19
R2023a之前,您不能使用该语法。相反,该表的索引使用花括号,或者使用变量
功能可见性来指定所有表行和变量。这些语法返回相同的结果与前面的操作和工作在所有版本。
numericScores {:,:} = numericScores {:,:}。* 0.25 numericScores。变量= numericScores。变量。* 0.25
当你使用这些语法,他们提取表的内容和连接成一个数组,执行计算,并分配结果回桌上。唯一的要求是,必须都有数据类型的变量,允许连接。
使用花括号,您还可以指定行和变量的子集,如
numericScores {1:5, (“Test1”、“Test3”)}
。与
变量
,你总是得到所有行和所有变量连接到一个数组中。
(因为R2023a)你也可以叫许多数学和统计功能直接在桌子上。例如,减去最小值在每个表变量的变量。
numericScores = numericScores - min (numericScores)
numericScores =10×3表Test1 Test2 Test3 _____ _____ _____ 3 5.25 2.5 2.75 2.75 3.75 1.25 2.5 - 4 0 0 0 3.5 2.75 3.75 5.25 4.25 6.5 0.75 4.75 1.25 - 4 5 1 0.25 2.5 3.25 2.75 - 2
R2023a之前你不能使用这种语法。相反,使用以下语法。他们返回相同的结果和工作在所有版本。
numericScores {:,:} = numericScores {:,:} - min (numericScores {:,:}) numericScores。变量= numericScores。变量- min(numericScores.Variables)
指望一个变量在任何表
在所有版本,您还可以执行计算在一个变量通过使用点符号和变量名。例如,添加一个修正价值5点最后的分数Test3
。
因为其他表变量是影响个体的操作变量,您可以执行这种类型的计算表。不管其他变量的数值或非数字数据。
numericScores。Test3= numericScores.Test3 + 5
numericScores =10×3表Test1 Test2 Test3 _____ _____ _____ 3 10.25 2.5 7.75 2.75 3.75 2.5 1.25 9 0 5 0 3.5 2.75 8.75 5.25 4.25 11.5 0.75 4.75 6.25 - 4 10 1 0.25 7.5 8.25 2.75 - 2
计算在全表行
完整的表,分数
数值和非数值变量。在所有版本,使用大括号索引或点符号执行计算表内指定行和变量。
例如,发现平均、最小和最大值为每个学生的考试成绩。计算这些值在每一行。将它们分配给分数
随着新的表变量。
一个简单的、有用的方法是将数据提取到一个矩阵,调用一个函数,然后分配一个新表变量的输出。例如,计算平均成绩在每一行。然后将它们添加到分数
在一个新表变量中,TestMean
。使用花括号来提取的数字数据Test1
,Test2
,Test3
成一个矩阵。行计算均值,指定尺寸2
当你打电话的意思是
。
var = [“Test1”,“Test2”,“Test3”];分数。TestMean =意味着(分数{:var}, 2)
成绩=10×6表LastName学校Test1 Test2 Test3 TestMean __________ __________ _____ _____ _____ ________“宋”某某学校90 87 93 90”柯林斯“XYZ 87 85 83 85”托雷斯“某某学校86 85 88 86.333“飞利浦”ABC学院75 80 72 75.667“凌”ABC学院89 86 87 87.333“Ramirez”ABC学院96 92 98 95.333“李”某某学校78 75 77 76.667“沃克”ABC学院91 94 92 92.333“加西亚”ABC学院86 83 85 84.667“常”某某学院79 76 82 79
各地执行计算的另一种方法是使用行rowfun
函数。您不需要使用时从表中提取数据rowfun
。相反,通过表和一个函数应用到数据作为输入参数rowfun
。虽然语法稍微复杂,rowfun
时可以有用的功能应用接受多个输入参数或返回多个输出参数。
例如,使用界限
函数来找到最小和最大的考试分数。的界限
函数返回两个输出参数,所以应用它分数
通过使用rowfun
。的输出rowfun
是一个新表TestMin
和TestMax
变量。在这种情况下,还指定“SeparateInputs”
作为假
在每一行,这样值组合成一个向量被传递给之前界限
。
minmaxTest = rowfun (@bounds,…分数,…“数据源”var,…“OutputVariableNames”,(“TestMin”,“TestMax”),…“SeparateInputs”假)
minmaxTest =10×2表TestMin TestMax ____ ____ 87 93 83 87 85 88 72 80 86 89 92 98 75 78 91 94 83 86 76 82
连接分数
和minmaxTest
这些值是在一个表中。
得分=(分数minmaxTest)
成绩=10×8表LastName学校Test1 Test2 Test3 TestMean TestMin TestMax __________ __________ _____ _____ _____ ________ ____ ____“宋”某某学校90 87 93 90 87 93”柯林斯“某某学校87 85 83 85 83 87”托雷斯“某某学校86.333 86 85 88 85 88”菲利普斯“ABC学院75 80 72 75.667 72 80“凌”ABC学院89 86 87 87.333 86 89“Ramirez”ABC学院96 92 98 95.333 92 98“李”某某学校76.667 78 75 77 75 78”沃克“ABC学院91 94 92 92.333 91 94“加西亚”ABC学院86 83 85 84.667 83 86“常”某某学院79 76 82 79 76 82
在全表计算沿指定的变量
发现平均得分为每个测试。计算这些值在表变量。
最简单的方法是使用的意思是
。第一次使用花括号中提取数字数据Test1
,Test2
,Test3
成一个矩阵。然后调用的意思是
计算矩阵的每一列的意思。输出是一个数字向量,其中每个元素是一个表的意思是变量。
var = [“Test1”,“Test2”,“Test3”];meanOfEachTest =意味着(分数{:var})
meanOfEachTest =1×385.7000 84.3000 85.7000
另一种方式来执行计算表变量是使用varfun
函数。您不需要使用时从表中提取数据varfun
。相反,通过表和一个函数应用到数据作为输入参数varfun
。
计算平均分数使用varfun
。输出是一个新表,表变量的有意义的名称。
meanOfEachTest = varfun (@mean,…分数,…“数据源”一样,var)
meanOfEachTest =1×3表mean_Test1 mean_Test2 mean_Test3 __________ __________ 85.7 84.3 85.7才开会
计算使用全表中的数据组
如果你拥有一个或多个表分组变量,然后你可以在组内的数据执行计算表。您可以使用一个分组变量中的值指定行属于的组。
例如,学校
变量分数
有两个值,美国广播公司(ABC)学校
和某某学校
。你可以把这两个值是表示一组数据的类别分数
。在这种情况下,您可以通过学校执行计算。
应用一个函数并使用分组变量,您可以使用varfun
函数。您可以指定一个函数,如的意思是
,然后用varfun
它应用于每个表你指定的变量。还当你指定分组变量,varfun
该函数适用于每组内每个表变量。
计算平均得分为每个测试的学校。
var = [“Test1”,“Test2”,“Test3”];meanScoresBySchool = varfun (@mean,…分数,…“数据源”var,…“GroupingVariables”,“学校”)
meanScoresBySchool =2×5表学校GroupCount mean_Test1 mean_Test2 mean_Test3 __________ __________ __________ __________ __________ ABC学校5 XYZ学校5 84 87.4 87 86.8 81.6 84.6
从R2018a开始,你也可以使用groupsummary
函数来执行计算组的每个表中的数据变量。
meanScoresBySchool = groupsummary(分数,“学校”,“的意思是”一样,var)
meanScoresBySchool =2×5表学校GroupCount mean_Test1 mean_Test2 mean_Test3 __________ __________ __________ __________ __________ ABC学校5 XYZ学校5 84 87.4 87 86.8 81.6 84.6
的语法groupsummary
有点简单。同时,您可以使用groupsummary
指定多个方法。例如,找到每个测试的最小和最大成绩的学校。
minmaxBySchool = groupsummary(分数,“学校”,(“最小值”,“马克斯”】,var)
minmaxBySchool =2×8表学校GroupCount min_Test1 max_Test1 min_Test2 max_Test2 min_Test3 max_Test3 __________ __________替替替ABC学校XYZ 5 75 96 80 94 72 98 78 90 75 87 77 93
使用所有预定义的方法groupsummary
,指定“所有”
的方法。计算所有统计学校的意思是测试成绩。
allStatsBySchool = groupsummary(分数,“学校”,“所有”,“TestMean”)
allStatsBySchool =表2×14学校GroupCount mean_TestMean sum_TestMean min_TestMean max_TestMean range_TestMean median_TestMean mode_TestMean var_TestMean std_TestMean nummissing_TestMean nnz_TestMean numunique_TestMean __________ __________ _________________售予_________________ _______ _______ _______ * * * _______ _______ ___________________ _______ _____________ ABC学校5 87.067 435.33 75.667 95.333 19.667 87.333 75.667 57.967 7.6136 0 5 5 XYZ学校5 83.4 417 76.667 90 13.333 85 76.667 29.856 5.464 0 5 5
有时你可能想找一个特定值在一个表变量,然后找到另一个表中的对应值的变量。在这种情况下使用rowfun
。
例如,发现每个学校的学生曾指测验分数最高。附加的支持功能,金宝appfindNameAtMax
得分最高,收益和学生的名字,得分。使用rowfun
应用findNameAtMax
每个小组的学生。的rowfun
函数是合适的,因为findNameAtMax
有多个输入参数(姓氏和考试分数)并返回多个输出参数。
maxScoresBySchool = rowfun (@findNameAtMax,…分数,…“数据源”,(“姓”,“TestMean”),…“GroupingVariables”,“学校”,…“OutputVariableNames”,(“max_TestMean”,“姓”])
maxScoresBySchool =2×4表学校GroupCount max_TestMean LastName __________ __________ _______ _____ ABC学校5 95.333“Ramirez”某某学校5 90“宋”
金宝app支持函数
函数[maxValue, lastName = findNameAtMax(名称、值)%返回最大值和姓%从最大值发生的行[maxValue, maxIndex] = max(值);lastName =名字(maxIndex);结束
另请参阅
表
|rowfun
|varfun
|groupsummary
|readtable
|vartype