将行和平均内容组合在表格中

2次观看(过去30天)
DavidL88
DavidL88 2021年4月7日
评论: DPB. 2021年4月9日
我有一个17,700x4表T,其中4列包含多个测试结果。第一列是测试的名称。每个测试有149行。第四列包含149个时间点,每个测试值范围为0.085秒至0.9秒。第二和第三列是在每个时间点评估的电压值。我有四个时间范围([0.085-0.125,0.17-0.23,0.27-0.45,0.6-0.9),我希望平均每个命名测试的电压值。
当前表中的一个测试'MLD_CG_11_FCL'的几行示例
测试v1.v2.时间
mld_cg_11_fcl.-0.68-0.730.086
mld_cg_11_fcl.-0.98-0.890.090
mld_cg_11_fcl.-1.22-0.970.094
mld_cg_11_fcl.-1.37-0.980.098
mld_cg_11_fcl.-1.41-0.930.102
mld_cg_11_fcl.-1.33-0.850.105
mld_cg_11_fcl.-1.16-0.750.109
mld_cg_11_fcl.-0.93-0.640.113
mld_cg_11_fcl.-0.66-0.480.117
mld_cg_11_fcl.-0.39-0.280.121
mld_cg_11_fcl.-0.14-03.0.125
我希望得到这个。其中V1和V2现在是时间范围内的值的平均值,从而每次测试将149行折叠成4行。
测试v1.v2.时间范围
mld_cg_11_fcl.-0.93-0.690.085-0.125.
mld_cg_11_fcl.-0.50-0.900.17 - -0.23
mld_cg_11_fcl.-1.28-0.950.27 - -0.45
mld_cg_11_fcl.-1.40-0.330.6-0.9
任何人都可以建议我是怎么做到的?
2评论
DavidL88
DavidL88 2021年4月7日
谢谢。我把表格附在这里。我删除了上述范围之外的时间。

登录评论。

接受的答案

DPB.
DPB. 2021年4月8日
将不相交区域的边缘平滑到…
边缘= [0.085 0.125;0.17 0.23;0.27 0.45;0.6 0.9];
e =边缘。';e = e (:);
E = [e(1)平均值(重塑(e(2:end-1),2,[]))e(end)];
加载电压
tfinish.properties.variablenames(1)= {'测试'};
tfinish.test =分类(tfinish.test);
tfinish.timebin =离散化(Tfinish.var4,e);%创建按时间分组的变量
tMeanByTest = rowfun (@ (x, y)协议(意味着(x, 1),意味着(y, 1)), Tfinish,......
'InputVariables',{'var2''var3'},......
'分组variables',{'测试'“TimeBin”},......
'indoleinpuls',1......
“OutputVariableNames”,{'意思是'“MeanV3”});
提供
>>头(Tmeanbytest)
ANS =.
8.×5表
测试TimeBin.Groupcount.平均值平均值
___________________________________________________
cg_hgh_cg_low_11_cpl.111.0.916670.23436.
cg_hgh_cg_low_11_cpl.215.2.11041.0282
cg_hgh_cg_low_11_cpl.3.46.4.50083.2523
cg_hgh_cg_low_11_cpl.4.77.2.79812.0317
cg_hgh_cg_low_11_cpr.111.0.546960.53518
cg_hgh_cg_low_11_cpr.215.1.67621.0518
cg_hgh_cg_low_11_cpr.3.46.2.46351.0401.
cg_hgh_cg_low_11_cpr.4.77.1.47231.1045
>>
你可以转动 TimeBin. 与您上面概述的标签概述的箱名/ ID分类。
如果以上的近似为箱边 离散化 不是允许的,两种方式去它 -
  1. 在定义的那些之间添加额外的边缘,然后删除不需要的垃圾箱,或者
  2. interp1与A.“最近的”插值方案要做的离散过程,您可以将所有人转储到一个垃圾箱中并将其移除并删除它。
当然,你也可以使用case语句或if…构造。
10条评论
DPB.
DPB. 2021年4月9日
我们没有在Nuce中有任何ERP,因此感谢解释!:)
以上语法/MATLAB编码习惯用法是使用“逻辑标引”;MATLAB中一个非常强大和重要的特性。在任何可以使用数字索引表达式的地方,也可以使用逻辑索引表达式;其结果将是对地址表达式中包含的那些元素进行寻址 真的 并且还认识到一个人可以使用 不是 操作员“〜”改变像这样的意义
isok =〜cellfun(@ isempty,somecellstraray);

登录评论。

更多答案(1)

鲍勃汤普森
鲍勃汤普森 2021年4月7日
我不确定您是如何定义时间范围的,但这里有一些我为其余过程考虑的伪代码。
1)将数据导入表格; 可阅读
2)确定不同测试的名称; 独特的
3)循环完成每个测试;因为 ismember. 选择相关行
4)确定时间范围;不确定是否要使用用户输入
5)通过每个时间范围循环;对于ISMEMEMEMS.
6)现在应该有测试和时间的特定数据集,平均; 的意思是
7)附加测试名称,平均值和时间(两列以保持为数字?)输出阵列。

标签

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!