R简易入门(二)
本文内容来源:https://www.dataquest.io/mission/128/working-with-data-frames
本文摘要:简单介绍一下用R处理数据
原始数据展示(这是一份UFO的目击统计报告,每一行代表了一份目击报告的信息,date sighted - 目击UFO的日期, date reported - 报告日期,duration - 目击时长, latitude - 纬度, longitude - 经度)
- date sighted,date reported,duration,city,state,geocode score,geocode precision,latitude,longitude
- 20040616,20040617,1 minute, Willoughby Hills, OH,0.743,zip,25.3166667,85.2833333
- 20021116,20021120,30 seconds, Halls Gap (near Melbourne) (NSW, Australia),0.768,zip,-37.8139965641595,144.963322877884
- 19920615,19961203,2-3 mins, River Falls, WI,0.757,zip,39.3666667,22.9458333
读取数据
- ufos <- read.csv('ufo_sightings.csv')
- print( head(ufos, 5)) # 输出文件的前5行
- print( tail(ufos, 5)) # 输出文件的后5行
- print( str(ufos)) # 以更容易阅读的格式输出,同时输出没一列的数据类型
任务一:统计每一年的UFO报告数量
因为要统计每一年报告的数量,即要处理的是date.reported这一列的数据,由于每个数据都包含了年月日,而现在只需要年份,所以可以将数据格式转换为字符类型,然后截断前四位的年份数据即可
- dateReported <- as.character(ufos$date.reported)
使用as.character函数来转变数据类型为字符类型,同理,as.int函数转变为整数类型;ufos$date.reported 返回的是ufos中的date.reported这一列,等价于ufos[,"date.sighted"]
使用substr函数来截断数据,该函数的第一个参数指定要截断的数据,第二个参数指定起始位置,第三个参数指定结束位置
- years <- substr(dateSighted, 1, 4)
统计每一个年份究竟出现了多少次,可以直接使用table函数
- print( table(years))
任务二:去掉不合理的数据
如果UFO的报告日期date.reported比目击日期date.sighted要前,则说明该数据是不合理的,需要去掉
在上面已经使用过了as.character(ufos$date.reported)来讲日期数据转换为字符格式,现在将字符格式转换为数据格式(不能将数字格式转换为日期格式)
- dateSighted <- as.character(ufos$date.sighted)
- dateSighted <- as.Date(dateSighted, "%Y%m%d")
- dateReported <- as.Date(as.character(ufos$date.reported), '%Y%m%d')
原来的数据中的某个日期,譬如:20040617,所以需要指定日期格式为%Y%m%d,如果原数据的格式为2004/06/17,则使用s.Date("2004/06/17", "%Y%m%d"),即格式一定要对应好
对两个日期数据进行减法运算
- delay = dateReported - dateSighted
对两个向量进行运算,会分成两个情况
- 如果两个向量长度相同,则对同一个位置的两个数据进行运算,譬如a <- c(3,4,5)和 b <- c(3,2,1), a - b的结果为c(0,2,4)
- 如果两个向量长度不同,就会对少元素的那个向量进行循环运算,譬如a <- c(3,4,5)和b <- 1,a - b的结果是将a中的每个元素都减去b中的唯一一个元素,结果为c(2,3,4);更加诡异的是a <- c(3,4,5,6,7)和b <- c(1,2),此时a - b实际上是将a中的元素按两个一组分别减去b的元素,结果为c(2,2,4,4,6)
布尔运算,对两个向量进行布尔比较会返回一个只包含布尔值的向量
- a <- c(1,2,3)
- b <- c(5,2,5)
- print(a > b) # 输出 [1] FALSE FALSE FALSE
- positiveDelays <- delay > 0 # 判断数据是否合理
过滤数据,可以使用一个只有布尔值的向量来过滤另一个向量或data frame,只保留那些在同样位置为TRUE的值
- filter <- c(TRUE, FALSE, TRUE, FALSE)
- bestPlanets <- c("Earth", "Mars", "Jupiter", "Venus")
- print(bestPlanets[filter]) # 输出[1] "Earth" "Jupiter"
- filter <- c(FALSE, FALSE, TRUE, TRUE)
- bestIceCreamFlavors <- data.frame(c("Peanut Butter Oreo", "Cookie Dough", "Mint Chocolate Chip", "Peanut Butter Cup"))
- twoFlavors <- bestIceCreamFlavors[filter,]
- print(twoFlavors)
要注意,对于data frame变量,过滤的时候使用的是[filter, ]而不是[filter],data.frame函数用来组合多列数据为一个新的data frame,该函数的每一个参数都代表了一个向量
- dates = data.frame(dateReported, dateSighted)
- positiveDates <- dates[positiveDelays,]
处理缺失数据
对于缺失的数据,R会使用一个NA来代替,可以使用na.omit函数来移除所有含有空数据的行,他的参数是一个data frame
- cleanDates <- na.omit(positiveDates)
R简易入门(二)的更多相关文章
- R简易入门(一)
本文内容来源:https://www.dataquest.io/mission/126/introduction-to-r 本文数据来源:https://www.whitehouse.gov/21st ...
- R语言入门二
一.R语言应知常用函数 1.getwd() 函数:获取工作目录(同eclipse设置workspace类似),直接在R软件中使用,如下图: 2.setwd(dir=”工作目录”) 函数:设置R软件RS ...
- Pandas简易入门(二)
目录: 处理缺失数据 制作透视图 删除含空数据的行和列 多行索引 使用apply函数 本节主要介绍如何处理缺失的数据,可以参考原文:https://www. ...
- 机器学习简易入门(四)- logistic回归
摘要:使用logistic回归来预测某个人的入学申请是否会被接受 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/ ...
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- 不用搭环境的10分钟AngularJS指令简易入门01(含例子)
不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...
- crontab简易入门
前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...
- 爬虫入门二 beautifulsoup
title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsou ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
随机推荐
- 【Android 界面效果21】Android ViewPager使用详解
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...
- 使用spring + cxf +tomcat构建webservice
这里使用maven构建的项目. 首先,我们构建一个maven项目: 然后将pom.xml文件中的内容拷贝到新建项目的pon.xml文件中: <project xmlns="http:/ ...
- 无线网络(WLAN)常见加密方式介绍
在使用无线路由器配置wifi安全设定的时候经常会遇到各种加密方式,即不懂意思也不知道如何选择.本文将对此做一个简单的介绍. 1.WEP 有线等效协议(Wired Equivalent Privacy, ...
- jQuery formValidator表单验证插件
什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...
- img 元素无法获取高度的问题
项目里有这么一个功能,需要 ajax 从服务器端获取数据,然后本地生成 DOM 结构再 append 到页面上. 其中的图片是直接拿到的图像数据,而不是 url,所以据此生成 dataURI 赋值给 ...
- UISearchDisplayController隐藏navigationBar需注意
不能调用self.navigationController.navigationBar.hidden = YES: 调用此代码的话,你隐藏了navigationBar搜索展示控制器就拿不到导航条:就会 ...
- css 雪碧图的制作
很多网站其实都用了雪碧图,确实方便了制作,以前以为这种小图标,都是一个一个图片呢(笑) 效果图如下: 代码如下: <html> <head lang="en"&g ...
- 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象
一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...
- 利用ExcelDataReader封装类 导入表格数据
nuget 添加Install-Package ExcelDataReader
- js密码的校验(判断字符类型、统计字符类型个数)
/** *判断字符类型 */ function CharMode(iN) { if (iN >= 48 && iN <= 57) //数字 return 1; if (iN ...