首页 > 解决方案 > 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

标签: matlabfor-loopmultiple-columns

解决方案


在 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

推荐阅读