matlab - MATLAB For循环根据另一列中的条目计算一列中的#s
问题描述
我有 50 个带有多个评分列的电子表格:一列 (AG) 的数字编码为 1:13,另一列 (SEC) 的数字编码为 1:6。
前任:
AG SEC
1 1
2 1
4 1
13 1
3 2
12 2
我想编写一个 for 循环来计算 .SEC 中与 .AG 中的 #s 1:5 相对应的所有 1。(输出为 3 - 它不会计算对应于 13 的 1)。我需要为 .SEC (1:6) 中的所有#s 发生这种情况。最终输出将在第一列中包含电子表格名称,并在每个进行中的列中计为 .SEC=1,2,3,4,5,6。
我当前的代码为 .SEC 中的总 .AG 计数创建了一个变量,但是是非歧视性的(计算 .AG 中给出的任何数字的次数,而不是计算特定值)
scoringfiles
是一个 50 项的路径列表(当我这样做时,readtable(scoringfiles)
它会遍历列表并读取 excel 文件。filelist
是一个只有文件名的 50 项列表。
for i=1:length(scoringfiles)
if contains(filelist(i,:),"sheet")
disp(i)
sheetnum=[sheetnum extractBetween(filelist{i},1,4)]
s1=[s1 length(find(readtable(scoringfiles(i,:)).SEC==1))]
s2=[s2 length(find(readtable(scoringfiles(i,:)).SEC==2))]
s3=[s3 length(find(readtable(scoringfiles(i,:)).SEC==3))]
s4=[s4 length(find(readtable(scoringfiles(i,:)).SEC==4))]
s5=[s5 length(find(readtable(scoringfiles(i,:)).SEC==5))]
s6=[s6 length(find(readtable(scoringfiles(i,:)).SEC==6))]
elseif contains(filelist(i,:),"graph")
disp("not sheet")
end
end
解决方案
在 Pranav 的帮助下,我想出了如何应用过滤器。就像在循环读取我的电子表格时将过滤器添加到 for 循环的每一行一样简单。见下文:
此示例仅查看 S1 和 S2。实际上,我有 6 个不同的 #s 创建 6 个表,每个电子表格都有计数。
for i=1:length(scoringfiles)
filter1 = readtable(scoringfiles(i,:)).AG >= 1;
filter2 = readtable(scoringfiles(i,:)).AG <= 5;
if contains(filelist(i,:),"sheet")
disp(i)
sheetnum=[sheetnum extractBetween(filelist{i},1,4)]
s1=[s1 length(find(readtable(scoringfiles(i,:)).SEC==1 & filter1 & filter2))]
s2=[s2 length(find(readtable(scoringfiles(i,:)).SEC==2 & filter1 & filter2))]
elseif contains(filelist(i,:),"graph")
disp("not sheet")
end
end
推荐阅读
- go - 如何处理“服务器推送”http连接的关闭事件
- mysql - 使用 MySQL Workbench 添加外键时出现 MySQL 错误 1064
- json - 在 Sequelize 结果中包含资源链接
- javascript - 如何使用 Django 中用户过滤的数据库中的数据生成气泡图(Chart.js)?
- java - java.lang.VerifyError:无法从具有 Firebase 管理员的最终类继承
- python-3.x - 在 matplotlib 3-D 图上设置刻度
- javascript - 如何使用 jQuery 通过键删除 JSON 中的 JSON?
- ios - 如何将 JSON 值从一个 ViewController 传递到另一个
- r - r- 'regr.xgboost' 不支持因子输入
- php - Android 输入流和输出流