楼主: Chengweing
9798 4

[问答] 关于if-else和ifelse判断语句问题 [推广有奖]

  • 1关注
  • 1粉丝

高中生

67%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
3.0562
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
321 点
帖子
23
精华
0
在线时间
31 小时
注册时间
2013-4-26
最后登录
2017-1-17

楼主
Chengweing 发表于 2016-4-21 21:45:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
之前通过查找以了解if-else 与ifelse的区别,前者不能处理向量,后者使用更为紧凑。但是在实际使用中发现除了问题,请各位指点!
示例代码如下:
###############################
#对一组数据进行区间判断,划分区间如
#7.5-6-5-3-2,对应类别为1,2,3,4,5,6
###########################
data<-c( "8.772500","12.261250","10.67")
do_sort<-vector(mode="numeric",length=3)
###################################
#使用if-else的判断
for(j in 1:3)
{
if(data[j]>="7.5"){
    do_sort[j]= "1"
    }else if (data[j]>="6" && data[j]<"7.5"){
    do_sort[j]="2"
    } else if (data[j]>="5" && data[j]<"6"){
    do_sort[j]="3"
    } else if (data[j]>= "3" && data[j]<"5"){
    do_sort[j]="4"
    } else if (data[j]>="2" && data[j] <"3"){
    do_sort[j]="5"
    } else if (data[j] <"2"){
    do_sort[j]="6"
    }
}
do_sort[1:3]#结果为1,6,6
############################
#另一种学习的方法
##############
do_sort[data[j]>="7.5"]<-1
do_sort[data[j]>="6" && data[j]<"7.5"]<-2
do_sort[data[j]>="5" && data[j]<"6"]<-3
do_sort[data[j]>= "3" && data[j]<"5"]<-4
do_sort[data[j]>="2" && data[j] <"3"]<-5
do_sort[data[j] <"2"]<-6
do_sort[1:3]#结果为6,6,6,
############################
#使用ifelse的实例
#####################
for(j in 1:3)
{
do_sort[j]<-ifelse(data[j]>="7.5",1,
ifelse(data[j]>="6" && data[j]<"7.5",2,
ifelse(data[j]>="5" && data[j]<"6",3,
ifelse(data[j]>= "3" && data[j]<"5",4,
ifelse(data[j]>="2" && data[j] <"3",5,6
)))))
}
do_sort[1:3]#结果为1,6,6
#################################
正确分类结果应都为1
不知道是哪里问题~~
二维码

扫码加我 拉你入群

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

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

关键词:else ELS LSE Data

本帖被以下文库推荐

沙发
万人往LVR 在职认证  发表于 2016-4-22 08:58:39
你的数字都加了双引号,所以是字符串。字符串比较大小时,是按前面字符顺序比较的,例如
"87">"677"

另外,这个问题cut()加switch()两行代码更简单
已有 1 人评分论坛币 收起 理由
jiangbeilu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
Chengweing 发表于 2016-4-22 09:06:20
万人往LVR 发表于 2016-4-22 08:58
你的数字都加了双引号,所以是字符串。字符串比较大小时,是按前面字符顺序比较的,例如
"87">"677"
非常感谢!的确是你说的错误。已修正可以了。另外你说的cut()和switch()语句更简单。

板凳
jiangbeilu 学生认证  发表于 2016-4-22 17:05:56
为什么不用findInterval这个函数呢:
  1. x<-c( 8.772500,12.261250,10.67,4)
  2. vec <- sort(c(7.5,6,5,3,2))
  3. findInterval(x,vec)
复制代码
已有 1 人评分学术水平 收起 理由
万人往LVR + 3 精彩帖子

总评分: 学术水平 + 3   查看全部评分

报纸
Chengweing 发表于 2016-4-30 16:52:15
jiangbeilu 发表于 2016-4-22 17:05
为什么不用findInterval这个函数呢:
多谢建议!

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

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