楼主: evarei2
4528 8

[问答] 100论坛币求如何用matlab删除包含某些特定字符的行 [推广有奖]

  • 0关注
  • 2粉丝

已卖:2183份资源

硕士生

99%

还不是VIP/贵宾

-

威望
0
论坛币
9663 个
通用积分
30.6619
学术水平
15 点
热心指数
15 点
信用等级
10 点
经验
304 点
帖子
60
精华
0
在线时间
353 小时
注册时间
2009-11-16
最后登录
2021-11-23

楼主
evarei2 发表于 2016-11-15 22:53:30 |AI写论文
200论坛币
以下表举例,如何删除简称中包含“银行”的整行数据

代码

简称

日期

a

b

c

000001.SZ

平安银行

2016-04-20

914.977

913.2572

943.3551

000002.SZ

万科A

2016-04-20

3113.542

3113.542

3113.542

000004.SZ

国农科技

2016-04-20

149.672

149.672

149.672

000005.SZ

世纪星源

2016-04-20

71.0825

70.9898

76.7357

000006.SZ

深振业A

2016-04-20

265.617

264.3369

280.0179

000007.SZ

中国银行

2016-04-20

131.3492

131.3492

131.3492

000008.SZ

神州高铁

2016-04-20

238.0462

236.9452

243.5514

000009.SZ

中国宝安

2016-04-20

74.0869

73.6552

83.314

000010.SZ

深华新

2016-04-20

89.752

89.9675

96.2167

000011.SZ

招商银行

2016-04-20

47.6965

47.4618

52.1544

000012.SZ

南玻A

2016-04-20

186.3025

186.3025

203.7684


删除后变为


代码简称日期abc
000002.SZ万科A2016/4/203113.5423113.5423113.542
000004.SZ国农科技2016/4/20149.672149.672149.672
000005.SZ世纪星源2016/4/2071.082570.989876.7357
000006.SZ深振业A2016/4/20265.617264.3369280.0179
000008.SZ神州高铁2016/4/20238.0462236.9452243.5514
000009.SZ中国宝安2016/4/2074.086973.655283.314
000010.SZ深华新2016/4/2089.75289.967596.2167
000012.SZ南玻A2016/4/20186.3025186.3025203.7684

我已经用循环可以实现上述功能因为原数据行数非常庞大(有百万行),逐行循环过慢,有没有不用for循环语句的方法?

最佳答案

evare3 查看完整内容

实现方法为,dat = dat(cellfun('isempty',strfind(dat{:,2},'银行')),:);亲测有效,自己解决问题,也没有人给出有效回答,所以悬赏回收。
关键词:MATLAB 100论坛币 matla atlab 0论坛币 matlab 如何

沙发
evare3 发表于 2016-11-15 22:53:31
实现方法为,dat = dat(cellfun('isempty',strfind(dat{:,2},'银行')),:);亲测有效,自己解决问题,也没有人给出有效回答,所以悬赏回收。

藤椅
lixuewei3 发表于 2016-11-16 18:43:39
匹配字符串,用strcmp类似的匹配函数可以,之前整理过一些,你可以看下http://blog.sina.com.cn/s/blog_a595d5850102x2s3.html
已有 2 人评分论坛币 热心指数 收起 理由
happy_287422301 + 2 热心帮助其他会员
evarei2 + 5 精彩帖子

总评分: 论坛币 + 5  热心指数 + 2   查看全部评分

板凳
evarei2 发表于 2016-11-20 11:18:29
lixuewei3 发表于 2016-11-16 18:43
匹配字符串,用strcmp类似的匹配函数可以,之前整理过一些,你可以看下http://blog.sina.com.cn/s/blog_a59 ...
strcmp需要完全匹配,我这个需要包含某个字符即删除,不知道有什么不用循环的办法可以达到上面的要求吗?

报纸
evarei2 发表于 2016-11-21 08:47:54
n=size(dat);
len=n(1,1);
for i=len:-1:1
    flag=strfind(dat{i,2},'银行');
    m=size(flag);
    m=m(1,1);
    if(m~=0)
        dat(i,:)=[];
    end
end

这是用循环的实现方法

地板
evarei2 发表于 2016-11-21 08:52:22
stata里面一个 drop if regexm(var2,"银行")==1 一个命令就可以迅速解决的功能,matlab应该也有类似的做法吧,不然每次做一个剔除都要几十分钟也太不方便了

7
evarei2 发表于 2016-11-21 14:52:43
各个论坛问了一个星期,还是知乎大神多。
dat = dat(cellfun('isempty',strfind(dat{:,2},'银行')),:);
已有 1 人评分论坛币 热心指数 收起 理由
happy_287422301 + 60 + 2 奖励积极上传好的资料

总评分: 论坛币 + 60  热心指数 + 2   查看全部评分

8
qindebin 发表于 2022-11-3 10:54:27
evare3 发表于 2016-11-15 22:53
实现方法为,dat = dat(cellfun('isempty',strfind(dat{:,2},'银行')),:);亲测有效,自己解决问题,也没有人 ...
可以解析一下这行代码吗,看不懂它怎么删掉这一行的,谢谢啦

9
qindebin 发表于 2022-11-3 10:54:50
evarei2 发表于 2016-11-21 14:52
各个论坛问了一个星期,还是知乎大神多。
dat = dat(cellfun('isempty',strfind(dat{:,2},'银行')),:);
可以解析一下这行代码吗,看不懂它怎么删掉这一行的,好难啊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 15:14