最近在研究excel透视图,想到好像自己在R-分组操作并不是很流畅,顺便学习分享一下。R自带数据集比较多,今天就选择一个我想对了解的mtcars数据集带大家学习一下R语言中的分组计算(操作)。

目录

1 dplyr包中的group_by联合summarize

1.1 group_by语法

1.2 summarise语法

1.3 group_by和summarise单变量分组计算

1.4 group_by和summarise多变量分组计算

2 ddply

2.1 ddply语法

2.2 ddply分组计算示例

3 aggregate

3.1 aggregate语法

3.2 aggregate分组计算示例

3.3 aggregate分组计算补充(formula形式)

4 splite

正文

首先给大家看一下mtcars数据集的基本情况,data.frame类型,32个观测对象,11个变量。

> head(mtcars)

mpg cyl disp hp drat wt qsec vs am gear carb

Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4

Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4

Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1

Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1

Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2

Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

> str(mtcars)

'data.frame': 32 obs. of 11 variables:

$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...

$ disp: num 160 160 108 258 360 ...

$ hp : num 110 110 93 110 175 105 245 62 95 123 ...

$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...

$ wt : num 2.62 2.88 2.32 3.21 3.44 ...

$ qsec: num 16.5 17 18.6 19.4 17 ...

$ vs : num 0 0 1 1 0 1 0 1 1 1 ...

$ am : num 1 1 1 0 0 0 0 0 0 0 ...

$ gear: num 4 4 4 3 3 3 3 4 4 4 ...

$ carb: num 4 4 1 1 2 1 4 2 2 4 ...

1 dplyr包中的group_by联合summarize

1.1 group_by语法

data为数据集

...为分组变量,可以是一个也可以是多个,多个的话以逗号分割group_by(mtcars, vs, am)

1.2 summarise语法

data为数据集,如果data被group_by定义分组,则根据分组变量分组计算

...为计算函数,可以是一个也可以是多个,多个的话以逗号分割summarise(data,disp = mean(disp),hp = mean(hp))

summarise计算函数Useful functions拓展

Center: mean(), median()

Spread: sd(), IQR(), mad()

Range: min(), max(), quantile()

Position: first(), last(), nth(),

Count: n(), n_distinct()

Logical: any(), all()

注:计算函数Useful functions拓展中英语不解释了,应该懂得

1.3 group_by和summarise单变量分组计算示例

> library(dplyr) #加载dplyr包

> by_cyl

> by_cyl

# A tibble: 32 x 11

# Groups: cyl [3]

mpg cyl disp hp drat wt qsec vs am gear carb

*

1 21 6 160 110 3.9 2.62 16.5 0 1 4 4

2 21 6 160 110 3.9 2.88 17.0 0 1 4 4

3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1

4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1

5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2

6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1

7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4

8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2

9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2

10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4

# ... with 22 more rows

# 对分组数据的相关变量进行函数计算

> summarise(by_cyl,disp = mean(disp),hp = mean(hp))

# A tibble: 3 x 3

cyl disp hp

1 4 105. 82.6

2 6 183. 122.

3 8 353. 209.

—————分割线:引入%>%管道符号,等价于上方分步骤使用———————————————————————————————————————————————————————————————————————————————————————————————————————————

>library(dplyr) #加载dplyr包

> mtcars %>% group_by(cyl) %>% summarise(disp = mean(disp),hp = mean(hp))

# A tibble: 3 x 3

cyl disp hp

1 4 105. 82.6

2 6 183. 122.

3 8 353. 209.

1.4 group_by和summarise多变量分组计算示例

> mtcars %>% group_by(vs, am) %>% summarise(n = n())

# A tibble: 4 x 3

# Groups: vs [2]

vs am n

1 0 0 12

2 0 1 6

3 1 0 7

4 1 1 7

2 ddply

接触了Hadley Wickham神包tidyverse以后感觉数据操作那么简单,这里介绍一种可以实现分组计算/操作的方法,就是plyr包的split-apply-combine思想

2.1 ddply语法

ddply(.data, .variables, ... )

.data为数据集

.variables分组变量一定要在“点+括号中”,例如".(sex)或.(group, sex)"

...为计算函数,可以是一个也可以是多个,

2.2 ddply分组计算示例

> library(plyr); library(dplyr)> dfx > ddply(dfx, .(group, sex), summarize,+mean = round(mean(age), 2),+sd = round(sd(age), 2))group sex mean sd1 A F 31.46 8.702 A M 28.49 2.783 B F 28.75 9.194 B M 40.90 8.135 C F 32.24 7.376 C M 40.77 13.22>>> ddply(dfx,.(sex), summarize,+mean = round(mean(age), 2),+sd = round(sd(age), 2))sex mean sd1 F 30.46 8.102 M 38.68 9.72

注意ddply中分组变量一定要在“点+括号中”,例如".(sex)  或  .(group, sex)"

3 aggregate

3.1 aggregate语法

aggregate(x, by, FUN)x为数据集by为分组变量列表FUN为计算函数

3.2 aggregate分组计算示例

> aggregate(state.x77, list(Region = state.region), mean)

Region Population Income Illiteracy Life Exp Murder HS Grad Frost

1 Northeast 5495.111 4570.222 1.000000 71.26444 4.722222 53.96667 132.7778

2 South 4208.125 4011.938 1.737500 69.70625 10.581250 44.34375 64.6250

3 North Central 4803.000 4611.083 0.700000 71.76667 5.275000 54.51667 138.8333

4 West 2915.308 4702.615 1.023077 71.23462 7.215385 62.00000 102.1538

Area

1 18141.00

2 54605.12

3 62652.00

4 134463.00

————————————————————————————————————————————————————————————————————

> aggregate(state.x77,list(

+ Region = state.region,

+ Cold = state.x77[,"Frost"] > 130),

+ mean)

Region Cold Population Income Illiteracy Life Exp Murder HS Grad

1 Northeast FALSE 8802.8000 4780.400 1.1800000 71.12800 5.580000 52.06000

2 South FALSE 4208.1250 4011.938 1.7375000 69.70625 10.581250 44.34375

3 North Central FALSE 7233.8333 4633.333 0.7833333 70.95667 8.283333 53.36667

4 West FALSE 4582.5714 4550.143 1.2571429 71.70000 6.828571 60.11429

5 Northeast TRUE 1360.5000 4307.500 0.7750000 71.43500 3.650000 56.35000

6 North Central TRUE 2372.1667 4588.833 0.6166667 72.57667 2.266667 55.66667

7 West TRUE 970.1667 4880.500 0.7500000 70.69167 7.666667 64.20000

Frost Area

1 110.6000 21838.60

2 64.6250 54605.12

3 120.0000 56736.50

4 51.0000 91863.71

5 160.5000 13519.00

6 157.6667 68567.50

7 161.8333 184162.17

3.3 aggregate分组计算补充(formula形式)

aggregate(formula, data, FUN)

#Formulas, one ~ one, one ~ many, many ~ one, and many ~ many:

> aggregate(weight ~ feed, data = chickwts, mean)

feed weight

1 casein 323.5833

2 horsebean 160.2000

3 linseed 218.7500

4 meatmeal 276.9091

5 soybean 246.4286

6 sunflower 328.9167

> aggregate(breaks ~ wool + tension, data = warpbreaks, mean)

wool tension breaks

1 A L 44.55556

2 B L 28.22222

3 A M 24.00000

4 B M 28.77778

5 A H 24.55556

6 B H 18.77778

> aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean)

Month Ozone Temp

1 5 23.61538 66.73077

2 6 29.44444 78.22222

3 7 59.11538 83.88462

4 8 59.96154 83.96154

5 9 31.44828 76.89655

> aggregate(cbind(ncases, ncontrols) ~ alcgp + tobgp, data = esoph, sum)

alcgp tobgp ncases ncontrols

1 0-39g/day 0-9g/day 9 261

2 40-79 0-9g/day 34 179

3 80-119 0-9g/day 19 61

4 120+ 0-9g/day 16 24

5 0-39g/day 10-19 10 84

6 40-79 10-19 17 85

7 80-119 10-19 19 49

8 120+ 10-19 12 18

9 0-39g/day 20-29 5 42

10 40-79 20-29 15 62

11 80-119 20-29 6 16

12 120+ 20-29 7 12

13 0-39g/day 30+ 5 28

14 40-79 30+ 9 29

15 80-119 30+ 7 12

16 120+ 30+ 10 13

4 splite

感觉splite没有太多好讲的,直接上例子体会一下吧~

> require(stats); require(graphics)> n g x > xg_group_length % sapply(length)> xg_group_length0 1 2 3 4 5 6 7 8 9 1042 105 103 93 119 120 80 88 97 101 52> xg_group_mean % sapply(mean)> xg_group_mean0 1 2 3 4 5 6 70.9776091 1.3270451 1.6645178 1.7567653 2.2137027 2.4426637 2.5394288 2.65576138 9 102.8258368 3.0948452 3.1845892

【推荐书籍】

《R数据科学》是一本专门讲解tidyverse相关包的书籍,主要涉及dplyr、tidyr、ggplot2、purrr等,非常值得学习,基本上此一本书可以解答数据处理的大部分问题

【往期回顾推荐】

r语言aggredate_R语言 分组计算,不止group_by相关推荐

  1. r语言aggredate_R语言 aggregate函数

    前言 这个函数的功能比较强大,它首先将数据进行分组(按行),然后对每一组数据进行函数统计,最后把结果组合成一个比较nice的表格返回.根据数据对象不同它有三种用法,分别应用于数据框(data.fram ...

  2. R语言 分组计算,不止group_by

    ​最近在研究excel透视图,想到好像自己在R-分组操作并不是很流畅,顺便学习分享一下.R自带数据集比较多,今天就选择一个我想对了解的mtcars数据集带大家学习一下R语言中的分组计算(操作). 目录 ...

  3. R语言编写自定义描述统计计算函数、使用doBy包的summaryBy函数计算不同分组(group)的描述性统计值(Descriptive statistics by group、样本个数、均值、标准)

    R语言编写自定义描述统计计算函数.使用doBy包的summaryBy函数计算不同分组(group)的描述性统计值(Descriptive statistics by group using summa ...

  4. R语言分组计算平均数、SE、SD等等

    标题 1.提出问题 2.解决办法 3. 举例 看完如果对你有帮助,感谢点赞支持! 如果你是电脑端,看到右下角的 "一键三连" 了吗,没错点它[哈哈] 1.提出问题 数据处理时经常遇 ...

  5. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.3 数据清洗和变量格式化...

    本节书摘来自华章计算机<数据科学R语言实践:面向计算推理与问题求解的案例研究法>一书中的第2章,第2.3节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Dun ...

  6. R语言按日期分组求皮尔森相关系数矩阵

    R语言按日期分组求相关系数 前几天得到了3700+支股票一周内的波动率,想要计算每周各个股票之间的相关系数并将其可视化.最终结果保存在制定文件夹中.部分数据如下: 先读取数据 data<-rea ...

  7. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.4 探索所有男选手的跑步时间...

    本节书摘来自华章计算机<数据科学R语言实践:面向计算推理与问题求解的案例研究法>一书中的第2章,第2.4节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Dun ...

  8. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.1 引言...

    本节书摘来自华章计算机<数据科学R语言实践:面向计算推理与问题求解的案例研究法>一书中的第2章,第2.1节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Dun ...

  9. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot

    R语言ggplot2可视化分组的重叠图实战:grouped overlay plot 目录 R语言ggplot2可视化分组的重叠图实战:grouped overlay plot #仿真数据

最新文章

  1. 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
  2. 旋转目标检测rotation-yolov5笔记
  3. python工程师薪资坑吗-6年Python开发工程师精心总结学习思路,再不看看就凉了...
  4. QML学习笔记-对QML基本认识
  5. 力扣172.阶乘后的零
  6. html设置在父元素底部对齐,如何将div对齐到父元素的底部
  7. html点击按钮动态添加input文本框
  8. LAMP兄弟连网络基础视频地址全集!!!
  9. Windows 系统必备软件
  10. 按指定次数重复显示 Excel 单元格
  11. 寻找四叶草HTML5小游戏,寻找四叶草的作文四百字
  12. Windows 10无线网连不上怎么办-旧时光 oldtimeblog
  13. 评测三款最流行的txt阅读器(windows适用)
  14. 【Vue 基础知识】keep-alive是什么?怎么用?
  15. 【Shell】Shell 脚本自动输入密码的三种方式
  16. TP5后端,VUE前端请求聚合数据驾照题库
  17. 心音与心电信号分析之一--6.26--心音信号概述
  18. 不定代词both/either/neither的区别
  19. 谷歌联合印企狙击华为鸿蒙OS:推出轻量版安卓系统打造智能手机
  20. 生活不像电影,生活比电影难多了

热门文章

  1. 要兼容ie时注意事项
  2. 使用手机模拟器与android操作系统
  3. 新时代ITer们的思考及购书有奖活动
  4. python tracer函数_Python流程控制常用工具和函数定义
  5. 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
  6. 用c语言实现数据结构算法将两个有序链表并为一个有序链表的算法,,(完整版)数据结构-习题集答案-(C语言版严蔚敏)...
  7. 十大“史上最佳”自动化测试工具
  8. linux java mysql 乱码_Linux下MySQL的字符集乱码问题总结
  9. selenium+webdriver错误...exceptions.ElementNotInteractableException: Message: Element is not visible处理
  10. linux安装运行redis