数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构。在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str(x)函数用于查看R对象的内部结构,通过print(x)函数,显示数据对象存储的内容,该函数把数据打印到控制台上,另外,RStudio提供了一个可视化查看数据的函数View(x)。

一,处理标量数据

标量通常是常量,每一个标量都有特定的数据类型,常用的数据类型是数值类型,字符类型,逻辑类型和日期类型。

对于逻辑类型,可能的值是TRUE和FALSE,用于逻辑操作的运算符:与(&)、或(|)、非(!)

R语言中经常会遇到一些特殊值:

  • 缺失值 NA(Not Avaiable),是不可用的缩写,通过函数is.na(x)来测试变量的值是否为NA;
  • NaN为“不是一个数”,意味着计算没有数学意义;
  • NULL值,空值,表示一个空的变量,不会占用任何空间,通过函数is.null(x)来测试变量的值是否为NULL;
  • 特殊的数字:Inf、-Inf 表示正无穷,负无穷;

1,日期类型

日期类型比较特殊,日期值通常以字符串的形式输入到R中,然后使用as.Date()函数转换为以数值形式存储的日期变量,as.Date()函数的语法是:

as.Date(x, input_format)

参数input_format是日期值的输入格式,默认的输入格式是"yyyy-mm-dd":

mydate <- as.Date("2017-01-13")

输入参数可以自定义日期的输入格式:

  • %d:数字表示的天(0-31)
  • %a:缩写的星期名(Mon、Tue、Wed、Thur、Fri、Sat、Sun)
  • %m:月份(00、01、02等)
  • %b:缩写的月份(Jan、Feb、Mar等)
  • %B:英语月份(January、February 、March等)
  • %y:两位数的年份
  • %Y:四位数的年份

举个例子,把默认的日期格式转换为特定类型的日期格式:

as.Date("2018-03-05","%Y-%m-%d")

把日期类型转换为字符串类型,可以使用format()函数,指定日期的输出格式:

format(mydate,format="output_format")

例如,把当前日期按照特定的格式输出:

today<-Sys.Date()
format(today,format("%B %d %Y"))

也可以直接把日期类型转换为字符串类型:

strdate <- as.character(mydate)

2,字符类型

常用的字符类型的操作:

  • 查看字符数量: nchar(x)
  • 提取或替换字符的子串: substr(x, start,stop)
  • 匹配模式,返回下标:grep(pattern, x, ignore.case=FALSE, fixed=FALSE),从x中搜索匹配模式的字符的下标
  • 匹配模式,并替换:sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE),从x中搜索匹配模式的字符,并以文本replacement替换
  • 分割字符: strsplit(x,split,fixed=FALSE)
  • 连接字符: paste(...,sep=" "),把多个字符连接成一个长的字符串,分隔符由参数sep指定
  • 字符的大小写转换: toupper(x),tolower(x)

3,数值类型

对于数值类型,算术运算符是:

  • 加(+),减(-),乘(*),除(/)
  • 幂运算:^ 或 **
  • 模运算:%%
  • 整除:%/%

处理数值类型常用的数学函数是:

  • 不小于x的最小整数:ceiling(x)
  • 不大于x的最大整数:floor(x)
  • 四舍五入,函数原型是round(x,digits=n),digits设定小数点位置,默认为0,即小数点后零位(取整)
  • 保留小数的有效位数:signif(x,digits=n)
  • 截取整数部分,舍弃小数部分:trunc(x)

常用的统计函数:

  • 平均值:mean(x)
  • 中位数:median(x)
  • 绝对中位数:mad(x)
  • 分位数:quantile(x,probs)
  • 标准差:sd(x)
  • 方差:var(x)
  • 值域:range(x)
  • 求和:sum(x)
  • 最值:min(x),max(x)
  • 标准化:scale(x, center=TRUE, scale=TRUE)
  • 计数:count(df, vars)和length(x),计数的使用方法比较特殊,请阅读《R实战 第六篇:数据变换(aggregate+dplyr包)

分割区间的函数:

  • 把连续型变量分割位有着n个水平的因子:cut(x, n, ordered_result)
  • 创建美观的分割点,通过选取n+1个等间距的取整值,把一个连续型变量分割位n个区间:pretty(x, n)

数学函数:

  • abs(x):绝对值
  • sqrt(x):平方根
  • exp(x):以e为底,x为指数的指数函数
  • 对数函数:log(x,base=n)对x取以n为底的对数,log(x) 自然对数以e为底,log10(x)以10为底;

二,类型判断和转换

三,随机抽样

从海量的数据抽取一定数量的样本数据,以创建分析模型,抽样的函数是:

sample(x, size, replace = FALSE, prob = NULL)

参数注释:

  • x:样本空间
  • size:抽取的样本数量
  • replace:如果为TRUE,表示放回抽样;如果为FALSE,表示无放回抽样;

举个例子,采用放回抽样,把样本重复12次,得到一个矩阵,并转换为数据框类型:

> d <-data.frame(matrix(sample(c(NA, :), , replace = TRUE), ))
> d
X1 X2 X3
NA
NA NA NA

四,伪随机数

函数runif()用于生成服从正态分布的伪随机数,n是生成随机数的个数,min和max是随机数的最值。

runif(n, min = , max = )

在每次生成随机数时,函数都会使用一个不同的种子,因此会产生不同的结果,通过函数set.seed(n)显式指定种子,让结果可以重现。

举个例子,设置随机数种子,使用runif()函数生成0-1区间上服从均匀分布的伪随机数:

set.seed(n)
runif()

设置R会话的小数点数量,生成整数伪随机数:

> options(digits=)
> set.seed()
> runif(,min=,max=)
[]

 

 

R实战 第三篇:数据处理(基础)的更多相关文章

  1. R实战 第三篇:数据处理

    在实际分析数据之前,必须对数据进行清理和转化,使数据符合相应的格式,提高数据的质量.数据处理通常包括增加新的变量.处理缺失值.类型转换.数据排序.数据集的合并和获取子集等. 一,增加新的变量 通常需要 ...

  2. 前端第三篇---前端基础之JavaScript

    前端第三篇---前端基础之JavaScript 一.JavaScript概述 二.JavaScript的基础 三.词法分析 四.JavaScript的内置对象和方法 五.BOM对象 六.DOM对象 七 ...

  3. 【0728 | 预习】第三篇 Python基础

    第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...

  4. R实战 第五篇:绘图(ggplot2)

    ggplot2包实现了基于语法的.连贯一致的创建图形的系统,由于ggplot2是基于语法创建图形的,这意味着,它由多个小组件构成,通过底层组件可以构造前所未有的图形.ggplot2可以把绘图拆分成多个 ...

  5. R实战 第七篇:绘图文本表

    文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式.背景央视.字体.网格线等. 一,使用ggtexttable绘图文本表 载入ggpubr包,可以使用g ...

  6. R实战 第十一篇:处理缺失值

    在真实的世界中,缺失数据是经常出现的,并可能对分析的结果造成影响.在R中,经常使用VIM(Visualization and Imputation of Missing values)包来对缺失值进行 ...

  7. R实战 第六篇:数据变换(aggregate+dplyr)

    数据分析的工作,80%的时间耗费在处理数据上,而数据处理的主要过程可以分为:分离-操作-结合(Split-Apply-Combine),也就是说,首先,把数据根据特定的字段分组,每个分组都是独立的:然 ...

  8. Docker实战 | 第三篇:Docker安装Nginx,实现基于vue-element-admin框架构建的项目线上部署

    一. 前言 在上一文中 点击跳转 通过IDEA集成Docker插件实现微服务的一键部署,但 youlai-mall 是前后端分离的项目,除了后端微服务的部署之外,当然还少不了前端工程的部署.所以本篇讲 ...

  9. 前端开发【第三篇: JavaScript基础】

    JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 一.如何编写 1.J ...

随机推荐

  1. js中的一元加法和一元减法

    大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同. 一元加法本质上对数字无任何影响: var iNum = 20; iNum = +iNum; al ...

  2. Linux安装Tomcat7

    linux版本:CentOS 6.2 iso文件下载地址:http://mirrors.163.com/centos/6.2/isos/i386/CentOS-6.2-i386-bin-DVD1.is ...

  3. ASP.NET MVC 播放远程服务器上的MP3文件

    问题: 做需求遇到需要播放远程服务器上的MP3音频,使用FTP去获取文件.但是一般都是在页面 <audio> 的src 中直接写文件地址来播放音频.实在不想做临时文件,折腾了半天终于可以通 ...

  4. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  5. 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示

    1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:zj ...

  6. POJ 3608 Bridge Across Islands [旋转卡壳]

    Bridge Across Islands Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10455   Accepted: ...

  7. [HAOI2009]毛毛虫

    题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 ). 输入输出格 ...

  8. tcp 网络编程

    网络编程同时也是进程间的一种通信:服务器进程和应用进程间的通信. OSI:开放式系统互联 OSI 7层模型:                                               ...

  9. zookeeper 内部机制学习

    zookeeper 内部机制学习 1. zk的设计目标 最终一致性:client不论连接到那个Server,展示给它的都是同一个视图. 可靠性:具有简单.健壮.良好的性能.如果消息m被到一台服务器接收 ...

  10. 整理的linux面试运维题

    如何在非交互模式下把 /home/example/下所有.conf文件中的 192.168.0.2 改成 db01 ?   find /home/example/ -type f -name &quo ...