查看: 168|回复: 9|关注: 0

[已解决] 数据统计的小程序,求助!

[复制链接]

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案

请教一下,我有这样一组数据(如附图data),希望统计其中不同col对应的value最大值和最小值,并将结果保存到新文件中(想得到的结果形式见附图result),能否帮忙写段小程序实现这个功能,谢谢!

result.png
data.png

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案
 楼主| 发表于 2018-6-13 17:55:16 | 显示全部楼层
自己折腾半天写成了下面这样,结果不对,x=[65,32,109,22],y=[28,102,11]能帮忙看看吗?
data=xlsread('F:\Q\data.xlsx');
a=unique(data(:,1));
i=1;
len=length(data);
for k=1:len
    if data(k,1)==a(i,1)
               
        x(i)=[data(k,2)]
    else
        y(i)=[data(k,2)];
        i=i+1;
    end
end

新手

5 麦片

财富积分


050


0

主题

3

帖子

0

最佳答案
发表于 2018-6-13 23:48:54 | 显示全部楼层
help xlsread
[ndata, text, alldata] = xlsread('myExample.xls')

help max
help min

论坛优秀回答者

权威

7663 麦片

财富积分



5

主题

9102

帖子

1749

最佳答案
  • 关注者: 399
发表于 2018-6-14 08:03:49 | 显示全部楼层 |此回复为最佳答案
  1. coll=randi([48 56],50,1);
  2. value=randi([30 90],50,1);
  3. unique_coll=unique(coll);
  4. for k=1:numel(unique_coll)
  5.     ind=find(coll==unique_coll(k));
  6.     result(k,:)=[unique_coll(k) min(value(ind)) max(value(ind))];
  7. end
  8. result
复制代码

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案
 楼主| 发表于 2018-6-17 11:59:07 | 显示全部楼层

谢谢,套用你这个做了一下,但是结果只输出了k取最大值时的ind和result, 怎样把k遍历的所有值对应的结果都输出出来呢?

论坛优秀回答者

权威

7663 麦片

财富积分



5

主题

9102

帖子

1749

最佳答案
  • 关注者: 399
发表于 2018-6-17 13:31:07 | 显示全部楼层
BNU小飞侠 发表于 2018-6-17 11:59
谢谢,套用你这个做了一下,但是结果只输出了k取最大值时的ind和result, 怎样把k遍历的所有值对应的结果 ...

输出的是第一列相同的值和对应的第二列的最大值和最小值。
没有明白:只输出了k取最大值时的ind和result 是指啥。
这是按照你的要求做的:不同col对应的value最大值和最小值

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案
 楼主| 发表于 2018-6-17 14:29:36 | 显示全部楼层

回复

本帖最后由 BNU小飞侠 于 2018-6-17 14:36 编辑
jingzhaos 发表于 2018-6-17 13:31
输出的是第一列相同的值和对应的第二列的最大值和最小值。
没有明白:只输出了k取最大值时的ind和result  ...
回复上传不了图片是为啥,麻烦看下一条,谢谢

不好意思,我没说清楚。我用在别的地方了,具体是这样的举个例子:一组数据data和一个list如图所示,想得到如图result的结果,于是我写成下面这样,但得到的result只有k=n时的结果,为什么呢?
c=data2(:,1);
n=numel(list);
for k=1:n
    ind=find(c==list(k));
    result=data2(ind,:);
end

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案
 楼主| 发表于 2018-6-17 14:33:15 | 显示全部楼层
本帖最后由 BNU小飞侠 于 2018-6-17 14:47 编辑
jingzhaos 发表于 2018-6-17 13:31
输出的是第一列相同的值和对应的第二列的最大值和最小值。
没有明白:只输出了k取最大值时的ind和result  ...

不好意思,我没说清楚。我用在别的地方了,具体是这样的举个例子:一组数据data(变成m行n列的数组)和一个list,想得到coll中第一列等于所有list值对应的行组成的数组,于是我写成下面这样,但得到的result只有k=n时的结果,为什么呢?
data=[58,22,1;73,34,4;58,56,6;11,32,8;90,123,43;25,15,9;90,23,3;90,25,8;11,22,90;12,22,4];
list=[58;11;90];
n=numel(list);
c=data(:,1);
for k=1:n
    ind=find(c==list(k));
    result=data(ind,:);
end



我想要的result是[58,22,1;58,56,6;11,32,8;11,22,90;90,123,43;90,23,3;90,25,8]
现在得到的是[90,123,43;90,23,3;90,25,8]

论坛优秀回答者

权威

7663 麦片

财富积分



5

主题

9102

帖子

1749

最佳答案
  • 关注者: 399
发表于 2018-6-17 17:37:03 | 显示全部楼层
BNU小飞侠 发表于 2018-6-17 14:33
不好意思,我没说清楚。我用在别的地方了,具体是这样的举个例子:一组数据data(变成m行n列的数组)和一 ...

这与你原来的要求可不是一回事儿。
  1. data=[58,22,1;73,34,4;58,56,6;11,32,8;90,123,43;25,15,9;90,23,3;90,25,8;11,22,90;12,22,4];
  2. list=[58;11;90];
  3. n=numel(list);
  4. c=data(:,1);
  5. for k=1:n
  6.      ind=find(c==list(k));;
  7.     result{k,:}=data(ind,:)
  8. end
  9. cell2mat(result)
复制代码

新手

10 麦片

财富积分


050


8

主题

29

帖子

0

最佳答案
 楼主| 发表于 2018-6-17 19:12:08 | 显示全部楼层
jingzhaos 发表于 2018-6-17 17:37
这与你原来的要求可不是一回事儿。

嗯,我没说清楚不好意思哈,之前那个也很好,现在都解决啦,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表