【发布时间】:2018-07-15 10:43:54
【问题描述】:
我正在使用 MATLAB 进行统计分析,但遇到了一个小问题。我需要计算特定问题的正确答案百分比。我将答案存储在一个单元格中。这里;
mySturct.nm_answers=
'${e://Field/n11},${e://Field/n99},${e://Field/n147}, Sam, Thomas' % = participant1
NaN % = participant 2
''${e://Field/n3},${e://Field/n11},${e://Field/n43},${e://Field/n59},${e://Field/n83},${e://Field/n91},${e://Field/n99},${e://Fiel...'' <Preview truncated at 128 characters>' % = participant 3
''${e://Field/n11},${e://Field/n19},${e://Field/n43},${e://Field/n59},${e://Field/n67},${e://Field/n83},${e://Field/n107},${e://Fi...'' <Preview truncated at 128 characters>' %= participant 4
...
% goes until participant 150
单元格的每一行代表参与者的答案。在此预览中,有 4 位参与者。我知道这看起来很乱,因为我已经连续记录了所有答案。 (我有一个包含 40 个选项的多项选择题,每个选项都记录在第一行。)
我有 20 个错误选项和 20 个正确选项,所以我的多项选择题有 40 个不同选项。每个以${e://Field/ 开头的答案都将被视为正确答案,而Sam、Thomas(检查participant1)等每个名称都将被视为错误答案。
此外,我还将计算未选择的选项。因此,20- # 个正确答案 将被视为“应该选择”,20- # 个错误答案 将被视为“应该未选择”。
我需要计算每个参与者的正确答案率。
这将是 = (不应该选择的 # 个 + 正确答案的 # 个)/40。
我无法使用find 函数来获取每个条件的数量(正确,错误。应该选择...)它给出了错误,因为它是一个单元格。
correctansw=lentgh(find(myStruct.nm_answers= '${e://Field/n'));
Undefined operator '==' for input arguments of type 'cell'.
另外,我无法使用strcmp 函数,因为每个答案都存储在一个(行、列)中。
我该怎么办?
我的回答
我结合了我得到的两个答案,这是我解决这个问题的代码;
numberCorrect = cellfun(@(x) length(strfind(x,
'e://Field/')),myStruct.nm_answers); %correct answers
numberanswers = cellfun(@(x) length(strfind(x, ',')),myStruct.nm_answers)+1;
%all answers
numberanswers(7,1)=0; , numberanswers(15,1)=0; ...
... % since I did +1, NaNs = 1...
numberofUncorrect = numberanswers-numberCorrect;
correctunticks= 20- numberofUncorrect;
myStruct.nm_perc= (correctunticks+numberCorrect)/40 ;
myStruct.nm_perc(7,1)= NaN;
myStruct.nm_perc(15,1)= NaN;
myStruct.nm_perc(38,1)= NaN;
myStruct.nm_perc(74,1)= NaN;
myStruct.nm_perc(105,1)= NaN;
clear numberanswers numberCorrect numberofUncorrect correctunticks
由于我只有 5 个 NaN,我可以手动完成,但将来我将使用 @TomasoBelluzzo 的 NaN 代码。更简洁更快捷的方式!
【问题讨论】:
-
所以每一行都是一个长字符串?有 40 个逗号分隔的条目?而正确答案包含关键字
e://Field/? -
@Matt 是的,每一行都是一个长字符串,但不是每一行都有 40 个条目。每个选择都记录在长字符串中,每个选择都用逗号分隔。
标签: matlab indexing cell strcmp