楼主: gtxing
3058 7

[问答] R语言if函数分组出错如何解决 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1051份资源

硕士生

21%

还不是VIP/贵宾

-

威望
0
论坛币
12300 个
通用积分
1.8505
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
3341 点
帖子
52
精华
0
在线时间
207 小时
注册时间
2016-5-26
最后登录
2022-10-12

楼主
gtxing 发表于 2016-8-5 12:00:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
麻烦大家帮忙看看分组结果不正确,这个函数哪里出问题,谢谢
提示: In if (x <= 1) { ... :
  the condition has length > 1 and only the first element will be used
代码如下:
library(data.table)
fun<-function(x){
  if(x<=1){
    y="<1"
  }
  else if(1<x & x<=20){
    y="1~20"
  }
  else if(20<x & x<=40){
    y="20~40"
  }
  else if(40<x & x<=60){
    y="40~60"
  }
  else if(60<x & x<=80){
    y="60~80"
  }
  else if(80<x & x<=100){
    y="80~100"
  }
  else if(100<x & x<=120){
    y="100~120"
  }
  else if(120<x & x<=150){
    y="120~150"
  }
  else if(150<x & x<=200){
    y="150~200"
  }
  else if(200<x & x<=300){
    y="200~300"
  }
  else   
    y=">300"
  return(y)
}
set.seed(112)
dt<-data.table(name=sample(LETTERS,50,TRUE),score=rep(1:50))
dt[,list(score=sum(score),分组=fun(score)),by="name"]



二维码

扫码加我 拉你入群

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

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

关键词:R语言 Library Element First BRARY if函数分组出错

沙发
xiaoyie 发表于 2016-8-6 07:17:51
你的数据是数值型吗

藤椅
zhou1_20 发表于 2016-8-6 13:18:21
换成这一句
  1. dt[,list(score=sum(score),分组=sapply(score,fun)),by=list(name)]
复制代码

板凳
jiangbeilu 学生认证  发表于 2016-8-6 16:35:18
这个可以不用if 函数写,推荐一种简洁的做法:
用findInterval查找对应区间,然后用mapvalues进行标签替换
  1. x=1:50
  2. vec = c(0,20,40)
  3. zz <- findInterval(x,vec,rightmost.closed=T)
  4. library(plyr)
  5. mapvalues(zz,1:3,c("=<20","20~40","40以上"))
复制代码

报纸
ntsean 发表于 2016-8-7 04:38:17
if 只能作用在一个element,不能判断一个vector
你的x是一个vector

地板
gtxing 发表于 2016-8-10 16:32:29
zhou1_20 发表于 2016-8-6 13:18
换成这一句
谢谢,这是什么原理呢

7
gtxing 发表于 2016-8-10 16:47:02
xiaoyie 发表于 2016-8-6 07:17
你的数据是数值型吗
是数值型的呀

8
gtxing 发表于 2016-8-10 16:48:56
jiangbeilu 发表于 2016-8-6 16:35
这个可以不用if 函数写,推荐一种简洁的做法:
用findInterval查找对应区间,然后用mapvalues进行标签替换 ...
谢谢o,语句很简洁

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 19:21