使用R处理工作生活中遇到的分组问题

 No one knows everything, and you don't have to.”   --free傻孩子
"R数据分析"专题·第4篇
  编辑 | free傻孩子
  4445字 | 7分钟阅读
本期推送内容
本期想为大家推荐的是一个自编函数(group_data);该函数的目的是处理生活和工作中常见的分组问题。在遇到以下情景时可能需要使用该函数,如根据员工的不同业务水平的综合得分对员工进行业绩考核;或者根据学生不同科目的得分情况对学生进行排名;或者根据不同微生物的丰度将微生物分为稀有(rare)种、丰富(abundant)种等。
01

数据要求和格式

本函数适应的数据格式为“数据框”;数据需要包含行名和列名。具体格式如下:

02

函数

需要用到的函数代码如下:
group_data <- function(data, by, group) {
  library(tidyverse)#load needed package
  data[,1:length(data)] %>%
    scale() %>%
    apply(1,mean) %>% #calculate mean for column
    data.frame(data) ->df2 #calculate scores
  group_by = quantile(df2[[1]],probs = by)#calculate group
  colnames(df2)[1] = "scores"# add a colnames for scores
  df2$group[df2[1] >= group_by[1]] = group[1]#create group
  df2$group[df2[1] < group_by[length(by)]] = group[length(by)+1]#create group
  i = 2
  while(i <= length(by)) {#create group for data in range 2 to length(by)
    df2$group[df2[1] < group_by[i-1] & df2[1] >= group_by[i]] = group[i]
    i = i +1
  }
  print(df2)
}

注意:本函数需要用到“tidyverse”包,如果没有安装的话建议安装后再运行以上函数。

03

Case1: 业绩考核

目的:根据所有业务的综合得分考核公司员工

要求:将公司员工分为三类得分在前90%的为优秀员工;

要求:得分在90%-70%的为良好员工;

要求:得分在70%以下的为不良员工。

数据如下:

df <- data.frame(
  业务1 = c(12,15,18,20,10,14),
  业务2 = c(20,25,21,28,29,21),
  业务3 = c(40,60,70,90,100,20),
  业务4 = c(100,200,300,90,400,230)
)
rownames(df) <- c("小吴","小刘","王吴",
                  "小天","小明","赵四")
group = c("优秀","良好","不良")
by = c(0.9,0.7)#top0.9,0.7
group_data(data = df,by = by, group = group)

计算后得到的结果如下:

04

Case2: 学生排名

#目的:根据所有科目的综合得分对班级学生排名

#要求:将班级学生分为四类得分在前90%的为A;

#得分在90%-80%的为B;

#得分在80%-70%的为C;

#得分在70%以下的为D。

数据如下:

df2 <- data.frame(
  物理 = sample(0:50,9,replace = FALSE),
  生物 = sample(0:50,9,replace = FALSE),
  政治 = sample(0:100,9,replace = FALSE),
  英语 = sample(0:100,9,replace = FALSE),
  语文 = sample(0:150,9,replace = FALSE),
  数学 = sample(0:150,9,replace = FALSE)
)
rownames(df2) <- c("小吴","小刘","王吴",
                  "小天","小明","赵四",
                  "王五","刘三","李一")

by2 = c(0.9,0.8,0.7)#top0.9,0.8,0.7
group2 = c("A","B","C","D")
group_data(data = df2,by = by2, group = group2)

结果如下:

(0)

相关推荐

  • 大话 Python:python 操作 excel 系列 -- 数据汇总与统计

    原创 Sir 老王 Python 集中营 1周前 在完成了前面系列的数据整理.数据清洗.数据提取与筛选之后,我们需要对进行进一步的汇总与统计使数据变成我们的可用信息. 1,数据分类汇总 # 对指定列分 ...

  • 假设检验的几种常见方法

    前言 Z检验 T检验 独立样本t检验 配对样本t检验 单样本t检验 前言 在这篇文章中,我不会具体去推导检验统计量和相应拒绝域的得出,这对于大部分非统计学专业的人士来说是晦涩的,我只想通过一个案例告诉 ...

  • order by和group by的区别

    order by: 用来对数据库的一组数据进行排序   desc:降序   asc:升序 group by: "By"指定的规则对数据进行分组,所谓的分组就是将一个"数据 ...

  • apply家族函数和for循环还是有区别的(批量生存分析出图bug)

    最近整理我GitHub代码,发现了之前一个批量生存分析代码是有问题的,因为不同基因表达量分组后,没有道理所有基因出图的P值不变,更诡异的是,lapply内部变量不识别,一定要外部变量. 为了给大家讲清 ...

  • 哦别做梦了!

    前面的学徒作业系列有一个是<数据挖掘>学习班的学员提问:绘图本身很简单但是获取数据很难.本来呢,我是安排给了转录组讲师,希望她可以把这个解决方案制作好PPT给大家做一节公开课的. 但是奈何 ...

  • 技术贴 | R语言菌群Alpha多样性分析和绘图

    本文由阿童木根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 箱型图(Boxplot)或者盒图是一种能同时展示一组或多组数据的极值.四分位数.中位数和离群值,显示数据离散情况的统 ...

  • 工作生活中的5个顶级思维

    "思维的深度,决定一个人的高度." 人生,就是一场邂逅问题的修行.不论是走荆棘的小路,还是宽阔的草原,问题就像脚下的路,一直走才会延伸. 而命运,就藏匿在我们思考问题的方式里. 一 ...

  • 工作生活中的5个顶级思维(深度)

    "思维的深度,决定一个人的高度." 人生,就是一场邂逅问题的修行.不论是走荆棘的小路,还是宽阔的草原,问题就像脚下的路,一直走才会延伸. 而命运,就藏匿在我们思考问题的方式里. 一 ...

  • 菜鸟记301-您工作生活中需要的图表,在这个网站都能满足!

    注:本图由孩她妈赞助 欢迎转发扩散 万一您身边的朋友正好用得着呢? 关键词:Canva中国网站:在线制作图表:操作难度*** 昨天小菜和您推荐的两个在线制作图表的网站,不知道您还满意吗?(请阅读参考文 ...

  • 工作生活中,遇到了对手怎么办?记住这一招!

    ➤选自曾仕强教授<中国式管理人际关系学>~ ➤点击视频左上角[曾仕强]关注公众号,收获更多人生大智慧~ ➤点击"在看",一起做曾师智慧传播火炬手~

  • 学会这4点,让你在工作生活中不上小人的当!

    聪明人绝不上的四个当: 第一,当有人告诉你谁谁谁在背后议论你或者骂你的时候,你可千万别上当.这个打着为你好的人可能是多事的小人,他只是等着两败俱伤的热闹,你千万别上当.再说,别人议论你那说明了什么?说 ...

  • 比110还重要:诉讼投诉及工作生活中必须知道的4个电话4个网

    我们都知道,有困难找警察,遇到了危险或受到他人侵犯.威胁.敲诈勒索等可打110报警. 但是大部分人不知道,还有四个电话,四个网在我们日常工作生活中和110一样同等重要,甚至比110还要重要,通过它们可 ...

  • 当你明白了这6个真相,能让你在工作生活中减少碰壁!

    让你人生开挂的六个人性真相,你相信吗? 第一,敌人变朋友会比朋友更可靠,朋友变敌人会比敌人更危险.穿着半遮半演的女人最动人,有悬念的电影最好看.所以,对任何人都要保持30%的神秘感. 第二,人不能太方 ...

  • 工作生活中不可缺少的5个顶级思维

    转载请注明来源   "思维的深度,决定一个人的高度."   人生,就是一场邂逅问题的修行.不论是走荆棘的小路,还是宽阔的草原,问题就像脚下的路,一直走才会延伸. 而命运,就藏匿在我 ...

  • 工作生活中不会谈判怎么办?请看这本书

    ​推荐<谈判天下>这本书,我们每个人工作.生活中每天都在自觉或不自觉地进行着谈判,故本书的视野超越了正襟危坐的谈判桌.遍布了你我工作生活会遇到的大小事件. 生动的例子,深入浅出.边看书,边 ...