楼主: XonlyU
1638 7

[有偿编程] R语言for命令程序报错问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

11%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
288 点
帖子
8
精华
0
在线时间
78 小时
注册时间
2019-11-29
最后登录
2023-2-28

楼主
XonlyU 学生认证  发表于 2020-6-25 15:02:27 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我想用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值的地方不可以用缺少值
这个命令虽然报错但可以运行,但是很奇怪的是,这个循环命令无法直接完成对所有满足条件的行的删除,要运行四次才能得到最终结果,求大神帮忙看一下,我很疑惑
二维码

扫码加我 拉你入群

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

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

关键词:For R语言 Error Data 循环命令 R语言 r语言入门 R语言处理过程 求助R语言

沙发
llb_321 在职认证  发表于 2020-6-25 16:21:45 |只看作者 |坛友微信交流群
因为你执行一次循环,data就少一行,但for语句的循环次数还是原始data的行数,所以会报错。
但主要问题是,你的代码是非常低效的,如果数据量大,这代码会非常累哦。其实可以用filter()函数,一行代码就可以了,根本不需要循环。

使用道具

藤椅
llb_321 在职认证  发表于 2020-6-25 16:25:20 |只看作者 |坛友微信交流群
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了

使用道具

板凳
XonlyU 学生认证  发表于 2020-6-25 18:45:06 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-6-25 16:21
因为你执行一次循环,data就少一行,但for语句的循环次数还是原始data的行数,所以会报错。
但主要问题是, ...
谢谢

使用道具

报纸
XonlyU 学生认证  发表于 2020-6-25 18:46:41 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-6-25 16:25
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了
那我还想问一下为什么第一次就会显示缺失,按您的意思应该是执行删除命令后才会缺失

使用道具

地板
XonlyU 学生认证  发表于 2020-6-25 18:48:16 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-6-25 16:25
另外,要实现你的目的,还可以把0值变为NA,然后用na.omit()就可以了
想问您一下执行的次数是由什么决定的呢

使用道具

7
llb_321 在职认证  发表于 2020-6-25 19:54:39 |只看作者 |坛友微信交流群
我也是瞎猜的

使用道具

8
XonlyU 学生认证  发表于 2020-6-25 19:57:16 来自手机 |只看作者 |坛友微信交流群
llb_321 发表于 2020-6-25 19:54
我也是瞎猜的
好的

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 17:42