如何解决与if和else任务进行循环
我有一个很容易完成的任务,该任务以前已经工作过,但现在已不复存在。我找不到错误!我想在数据框中添加2列,说V1是否有雨(无雨= 0),V2是否有炎热的天(炎热的日子> = 30)。有人可以帮忙吗?我的代码已附上。
for (a in 1:length(Test)){
if (Test$V2[a] >= 30){
Test$Heat[a] = "Hot"
} else {
Test$Heat[a] = "Not hot"
}
}
这是我的代码:
Test = structure(list(V1 = c(0,1.8,0.3,1.5,1.6,0.2,0.9,7.4,1.1,0.6,2.6,5,3.2,3.8,0.4,2.1,2.4,0.1,4.7,5.9,4.2,1,4.8,6.3,3.1,6.4,0.8,2.7,9.9,1.9,0.5,29.9,8.6,18.4,19.4,11.8,11.9,16.4,5.1,0.7,4.5,6,5.2,6.9,2.5,4,24.5,2.8,10.3,3.6,4.1,23.7,15.9,7.9,14.1,6.7,1.7,14.7,20.9,16.2,2,9.2,1.4,36.9,14.2,3,4.9,7.3,5.6,7.6,9.1,3.5,2.2,6.1,1.2,2.9,8.8,16.3,4.3,9,3.7,4.4,7.8,26.6,7.2,8.5,12.1,13.3,3.9,11.5,4.6,6.6,13.4,9.6,2.3,16.8,9.5,13.1,11.3,30.9,19.8,12,30.3,9.3,1.3,16,12.3,5.5,12.5,6.5,29.2,10.8,12.6,20.7,2.3),V2 = c(-0.9,-0.1,-0.2,-6.3,-4.9,-1.2,-0.3,-1.4,5.4,-0.5,-3,-4.8,-3.9,-3.6,-3.7,-5,-8,-7.7,-7.4,-4,-2.2,-1.7,-1,8.4,-0.4,5.8,11,13.7,10.7,18.9,7.1,10.9,10.5,17.5,8.2,10.2,10.4,15.8,19,15,13,12.4,8.9,16.5,18.7,18.1,19.6,22.6,22.3,18.2,16.7,13.9,13.2,14,18.3,21.8,22.4,18,14.3,8.7,5.7,15.3,11.6,13.8,14.8,15.2,20.3,12.9,11.7,17.9,22,21.2,20.6,19.3,19.9,22.1,24.4,26.3,21.4,17.8,22.9,24.8,18.6,23,25.6,28.8,28.4,25,26.7,28,20.1,20.2,15.7,21.6,27.1,25.7,24,24.7,29.1,24.2,20.8,23.5,28.5,30.8,32.2,27.7,25.1,29.6,27,25.8,23.1,21.5,25.5,29,31.3,30.2,29.7,25.9,22.8,21,22.7,26.5,31.9,28.3,22.2,14.5,20,21.7,26.8,31.1,28.6,33.2,26.1,23.6,17.3,14.9,18.8,29.4,24.6,26.9,19.5,19.7,25.4,25.2,30.7,21.1,17.1,21.9,17.2,18.5,15.1,12.7,19.1,17.6,15.5,11.4,20.5,23.3,12.2,9.7,9.4,15.6,11.1,7.5,-0.7,7.7,6.2,8,10,5.3,-0.6,-1.3,-0.8,-5.3,-8.7,-8.8,-3.8,8.3,9.8,10.1,12.8,3.3,-2,19.2,20.4,23.9,22.5,26,23.8,27.5,23.4,24.9,28.1,16.1,26.4,27.2,27.3,27.8,28.2,29.5,27.9,31.6,32.8,30,32.1,33.5,29.8,30.6,28.9,28.7,31.7,16.6,27.4,17.4,21.3,17,11.2,8.1,-1.6,10.6,4.9)),.Names = c("V1","V2"),class = "data.frame",row.names = c(NA,-730L))
解决方法
我们可以使用ifelse
代替if/else
,因为ifelse
是向量化的,而if/else
不是向量化的,而使用for
循环则效率较低R
Test$Heat <- with(Test,ifelse(V2 >= 30,"Hot","Not hot"))
,
如果将 length()函数更改为 nrow()函数,则可以成功运行上述代码。这是代码。
for (a in 1:nrow(Test)){
if (Test$V2[a] >= 30){
Test$Heat[a] = "Hot"
} else {
Test$Heat[a] = "Not hot"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。