R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by)
R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by)
数据:
某市2014年-2018年空气质量指数日数据,需要按年分类计算每年 warm值为1和 0的均值。
数据长这个样子:
目标:求下列的均值
一、数据处理(提取年月)
首先需要处理一下日期数据,拿到想要的年月。
这里先看一下R语言自带的 和 lubridate包的 提取年月季度的函数 的区别
> sjz = read.csv('C:/Users/Administrator/Desktop/简书/sjz.csv')
> head(sjz) #读取的日期格式不是R可以处理的 date AQI quality_level PM2.5 PM10 SO2 CO NO2 O3_8h level
1 2014/1/1 85 良 46 120 98 0.9 53 56 2
2 2014/1/2 205 重度污染 155 261 221 2.5 106 23 5
3 2014/1/3 138 轻度污染 106 210 178 1.6 74 50 3
4 2014/1/4 229 重度污染 179 333 171 3.0 87 27 5
5 2014/1/5 274 重度污染 224 376 150 3.3 85 30 5
6 2014/1/6 372 严重污染 322 467 150 4.3 85 22 6> sjz$date = as.Date(sjz$date) #R可以处理的日期格式是:y-m-d或者y/m/d
> head(sjz)date AQI quality_level PM2.5 PM10 SO2 CO NO2 O3_8h level
1 2014-01-01 85 良 46 120 98 0.9 53 56 2
2 2014-01-02 205 重度污染 155 261 221 2.5 106 23 5
3 2014-01-03 138 轻度污染 106 210 178 1.6 74 50 3
4 2014-01-04 229 重度污染 179 333 171 3.0 87 27 5
5 2014-01-05 274 重度污染 224 376 150 3.3 85 30 5
6 2014-01-06 372 严重污染 322 467 150 4.3 85 22 6
1.1 R自带函数提取年月日季度
> head(years(sjz$date)) #R自带函数提取年
[1] "16071y 0m 0d 0H 0M 0S" "16072y 0m 0d 0H 0M 0S" "16073y 0m 0d 0H 0M 0S"
[4] "16074y 0m 0d 0H 0M 0S" "16075y 0m 0d 0H 0M 0S" "16076y 0m 0d 0H 0M 0S"> head(months(sjz$date)) #R自带函数提取月
[1] "一月" "一月" "一月" "一月" "一月" "一月"> head(quarters(sjz$date)) #R自带函数提取季度
[1] "Q1" "Q1" "Q1" "Q1" "Q1" "Q1"> head(days(sjz$date)) #R自带函数提取天
[1] "16071d 0H 0M 0S" "16072d 0H 0M 0S" "16073d 0H 0M 0S" "16074d 0H 0M 0S" "16075d 0H 0M 0S"
[6] "16076d 0H 0M 0S"
1.2 lubridate包提取年月日
> library(lubridate)
> sjz$year = year(sjz$date)
> sjz$month = month(sjz$date)
> head(sjz) #最后两列提取结果是不是就很人性date AQI quality_level PM2.5 PM10 SO2 CO NO2 O3_8h level year month
1 2014-01-01 85 良 46 120 98 0.9 53 56 2 2014 1
2 2014-01-02 205 重度污染 155 261 221 2.5 106 23 5 2014 1
3 2014-01-03 138 轻度污染 106 210 178 1.6 74 50 3 2014 1
4 2014-01-04 229 重度污染 179 333 171 3.0 87 27 5 2014 1
5 2014-01-05 274 重度污染 224 376 150 3.3 85 30 5 2014 1
6 2014-01-06 372 严重污染 322 467 150 4.3 85 22 6 2014
1.3 生成分类变量warm
如果月份是11,12,1,2,3,则设置warm为1.其他为0
> #本行这种写法错误 sjz$warm = ifelse(sjz$month == 11|12|1|2|3,1,0),须多次使用ifelse语句,即下面这种> sjz$warm = ifelse(
+ sjz$month == 11,
+ 1,
+ ifelse(
+ sjz$month == 12,
+ 1,
+ ifelse(sjz$month == 1, 1, ifelse(
+ sjz$month == 2, 1, ifelse(sjz$month == 3, 1, 0)
+ ))))> head(sjz)date AQI quality_level PM2.5 PM10 SO2 CO NO2 O3_8h level year month warm
1 2014-01-01 85 良 46 120 98 0.9 53 56 2 2014 1 1
2 2014-01-02 205 重度污染 155 261 221 2.5 106 23 5 2014 1 1
3 2014-01-03 138 轻度污染 106 210 178 1.6 74 50 3 2014 1 1
4 2014-01-04 229 重度污染 179 333 171 3.0 87 27 5 2014 1 1
5 2014-01-05 274 重度污染 224 376 150 3.3 85 30 5 2014 1 1
6 2014-01-06 372 严重污染 322 467 150 4.3 85 22 6 2014 1 1
综上,我们得到了含有AQI、year、month、warm等变量的数据。这样就可以进行下面的分类了。
二、分类
2.1 使用ddply函数
ddply(data,variables,fun = NULL, …,progress = “none”,drop = TRUE, parallel = FALSE)
data : 要处理的数据框
variables :变量,以数据框的拆分,作为引用变量,公式或字符向量
drop :因变量的组合不会出现在输入数据被保存(FALSE)或下降(TRUE,默认情况下)
> library(plyr)
> a = ddply(sjz,c("year","warm"),summarise,mean = mean(AQI),length = length(AQI))
> class(a)
[1] "data.frame"
> ayear warm mean length
1 2014 0 131.85514 214
2 2014 1 198.65972 144
3 2015 0 93.99065 214
4 2015 1 165.17361 144
5 2016 0 102.68692 214
6 2016 1 186.37500 144
7 2017 0 117.07944 214
8 2017 1 152.25694 144
9 2018 0 97.78505 214
10 2018 1 120.75694 144
2.2 使用aggregate函数:
aggregate(x,by, FUN, …, simplify = TRUE, drop = TRUE)
x : 要分类汇总的数据,可以是各种形式,包括公式形式
by : 分类依据,必须是list形式
FUN : 汇总使用的函数
simplify : 默认为TRUE,表示汇总结果以简化形式表现
drop : 默认为TRUE,表示不存在的Level组合自动舍弃
> b = aggregate(x = sjz$AQI,by = list(sjz$year,sjz$warm),FUN = mean)
> class(b)
[1] "data.frame"
> bGroup.1 Group.2 x
1 2014 0 131.85514
2 2015 0 93.99065
3 2016 0 102.68692
4 2017 0 117.07944
5 2018 0 97.78505
6 2014 1 198.65972
7 2015 1 165.17361
8 2016 1 186.37500
9 2017 1 152.25694
10 2018 1 120.75694
2.3 使用split 函数
split(x, f,drop = FALSE, …)
x : 要进行划分的数据
f : 划分的依据,可以是list,表示按list中各变量的Level组合来划分
drop : 默认为FALSE,若为TRUE,当f为list时,各变量的Level组合为空时自动舍弃这一分组
> c = split(sjz$AQI,list(sjz$year,sjz$warm))
> class(c)
[1] "list"
> sapply(c,mean)2014.0 2015.0 2016.0 2017.0 2018.0 2014.1 2015.1 2016.1 2017.1
131.85514 93.99065 102.68692 117.07944 97.78505 198.65972 165.17361 186.37500 152.25694 2018.1
120.75694
2.4 使用by函数
by(data, INDICES, FUN)
data : 数据框或矩阵
INDICES : 一个因子或因子组成的列表,定义了分组
FUN :任意函数
> d = by(sjz,list(sjz$year,sjz$warm), function(x) mean(x[,2]))
#fun这里用mean = sjz$AQI 显示错误是为啥
> class(d)
[1] "by"
> d
: 2014
: 0
[1] 131.8551
----------------------------------------------------------------------
: 2015
: 0
[1] 93.99065
----------------------------------------------------------------------
: 2016
: 0
[1] 102.6869
----------------------------------------------------------------------
: 2017
: 0
[1] 117.0794
----------------------------------------------------------------------
: 2018
: 0
[1] 97.78505
----------------------------------------------------------------------
: 2014
: 1
[1] 198.6597
----------------------------------------------------------------------
: 2015
: 1
[1] 165.1736
----------------------------------------------------------------------
: 2016
: 1
[1] 186.375
----------------------------------------------------------------------
: 2017
: 1
[1] 152.2569
----------------------------------------------------------------------
: 2018
: 1
[1] 120.7569
R语言基础之第一部分:5种数据对象类型
R语言基础之第二部分:操纵数据/取子集
R语言基础之第三部分:重要函数apply族函数的使用
R语言基础之第四部分 : 排序
R语言基础之第五部分 : 总结数据信息
R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by)相关推荐
- C语言1013山东理工大学试题,山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算).ppt...
山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算) 格式输入函数 * 格式: scanf("格式控制串",地址表) 功能:按指定格式从键盘读入数据,存入地址表指定的 存 ...
- 零基础怎么学测试?2022史上最全软件测试学习路线图+教程分享
1.软件测试基础知识 >> 下载300G软测学习资料包[视频教程+PPT+课件+项目源码] 学习目标:对软件测试整理的测试流程有清晰的概念,了解软件测试到底是做什么的,软件测试的各种专业术 ...
- R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)
R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...
- R语言基础题及答案(六)——R语言与统计分析第六章课后习题(汤银才)
R语言与统计分析第六章课后习题(汤银才) 题-1 有一批枪弹, 出厂时, 其初速v∼N(950,σ2)v\sim N(950,\sigma^2)v∼N(950,σ2)(单位:m/sm/sm/s). 经 ...
- R语言与机器学习学习笔记(分类算法)
转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...
- R语言基础学习记录4:重要函数
时间: 2018-07-18(学习) 2018-07-22(学习记录) 教程:慕课网 <R语言基础> 讲师:Angelayuan 补充内容: R语言常用函数总结大全.gl()函数 学习内容 ...
- R语言基础指令和并行算法初识(上篇)
一.R语言背景介绍 二. R语言基础指令 三. R语言并行算法 四. 计划打算 一.R语言背景介绍 1.2.起源:R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支.可以认为R是S语言的一种 ...
- 统计学习导论之R语言应用(四):分类算法R语言代码实战
统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...
- R语言基础知识入门学习(一)
目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...
最新文章
- 比ewsa更快的跑包工具_重庆单肩包订购,编织布袋定做厂家
- python读取csv文件的方法-CSV文件在Python中的几种处理方式
- JQuery获取下拉列表框选中项
- 《英语语法新思维初级教程》学习笔记(二)名词
- 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料
- 在vue-cli中搭建mock服务器
- php查询socket数据包头,php 查询数组值php中关于socket的系列函数总结
- GPU Gems1 - 8 衍射的模拟
- 玩转Javascript 给JS写测试
- mysql解压安装如何登录_如何安装windows解压版MySQL及开启报错
- 19款探岳刷隐藏教程_三星S10系列如何隐藏导航栏 官微“手把手”教你设置
- oracle merge
- 对象可以创建数组吗_电脑零基础可以学习创建网站吗?
- 前端学习与“IT界大佬告诉你,程序员接私活的7大平台利器”
- Leetcode 133.克隆图
- Android中R文件的丢失问题以及aapt.exe停止工作如何解决
- Linux教程系列-命令大全
- 域名解析地址如何查看?为什么要做域名解析?
- 同居mm_倾向于同居
- 课堂纪律一团糟老师应该怎么办?
热门文章
- Python调用PHP的函数
- 【Java并发】Java并发编程-02
- LaTex\TexStudio 数学矩阵
- MATLAB中repmat函数用法
- 麦克风阵列杂音很重解决方案(科大讯飞麦克风阵列+6.0)
- BZOJ4768: 2555加强版之wxh loves substring
- 中职计算机说课教法,2015教师资格证面试高中美术中职公共艺术美术篇说课稿 平面构成中的形象—活泼的点...
- Gradle 2.0 用户指南翻译——第五十章. 依赖管理
- 记getsockopt有时偶然返回为零的异常
- 铣床是什么?怎么分类