全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2108 7
2020-06-25
我想用for命令实现“把所有变量都为0的行删除”
写的程序如下:
for (i in 1:nrow(data)){
  if(all(data[i,1:ncol(data)])==0)
    data=data[-i,]
}

报错显示:Error in if (all(data[i, 1:ncol(data)]) == 0) data = data[-i, ] :
  需要TRUE/FALSE值的地方不可以用缺少值
这个命令虽然报错但可以运行,但是很奇怪的是,这个循环命令无法直接完成对所有满足条件的行的删除,要运行四次才能得到最终结果,求大神帮忙看一下,我很疑惑
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-6-25 16:21:45
因为你执行一次循环,data就少一行,但for语句的循环次数还是原始data的行数,所以会报错。
但主要问题是,你的代码是非常低效的,如果数据量大,这代码会非常累哦。其实可以用filter()函数,一行代码就可以了,根本不需要循环。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-25 16:25:20
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-25 18:45:06
llb_321 发表于 2020-6-25 16:21
因为你执行一次循环,data就少一行,但for语句的循环次数还是原始data的行数,所以会报错。
但主要问题是, ...
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-25 18:46:41
llb_321 发表于 2020-6-25 16:25
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了
那我还想问一下为什么第一次就会显示缺失,按您的意思应该是执行删除命令后才会缺失
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-6-25 18:48:16
llb_321 发表于 2020-6-25 16:25
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了
想问您一下执行的次数是由什么决定的呢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群