此部分的内容,全部是对张敬信博士书籍的学习总结。
出发点: 因为tidyverse简洁编码,使R代码更加易读。我就想系统再次学习下R,这样让自己写的R代码更加简洁。
0 简介
0.1认识编程元素和语法规则
R中编程元素:元素,向量,数据框,列表,
Hadley Wickham定义的数据科学的工作流程:
数据读入- 清理数据-数据转换-数据可视化-数据建模-文档沟通
0.2 R语言编程思想
- 面向对象:一切,包括数值,函数,图像等
- 面向函数: 函数式思维,包括自定义函数和泛函式编程
- 向量话编程: 指的是向量,矩阵,多维数组
1 基本语法
1.1 基本运算
%/%:整除
%%:求余数
indentical(x,y):判断两个对象是否严格相等
dplyr:near(x,y): 判断两个浮点数数是否近似相等
| : 或
&: 与
上述两个运算符是向量运算符,对向量中所有元素分别进行运算
1.2 基本数据类型
数值型, 逻辑型,字符型
R中NA表示缺失值,NULL表示空值,NaN表示非数,Inf表示无穷大
对于大多数函数,NA具有传染性,即NA参与的运算,结果会变成NA
可以使用calss, typeof, mode()查看对象x的蕾西
str()显示对象x的结构
保存和载入数据
save(x, file="datas..")
load()
Vignettes (若有) ,是包的作者写的使用文档,它是该包的最佳学习资料
可以创建project来进行
向量都有两个属性:type(类型), length(长度)
numeric()## 创建一个全为0的指定长度的数值向量
创建等差向量
seq(from, to, by, length.out)
创建重复的向量
rep(x, times. lenght.out, each,...)
两个长度不同的向量做运算,短的会自动循环补齐以配合长的
逻辑向量
%in%用来判断元素是否属于集合
字符向量
移除向量名字: names(x) = NULL
对向量排序
sort(x, decreasing, na.last,....): sort(x)
order(), 返回值是元素排好序的索引,以其结果作为索引访问元素,正好是排好序的向量。
x[order(x)]
rank(), 返回值是该向量中对应元素的“排名”。
rev()### 翻转
matrix创建
矩阵也要求元素是同一类型,数值矩阵、逻辑矩阵等
matrix(x, ncol, nrow, byrow, dimnames, )
对角矩阵: diag(1:4, nrow=4)
矩阵运算:
矩阵乘法:** %*% **
多维数组
创建: array(data, dim, dimnames, ),
访问: array(行, 列, 第三个维度)
1.3 数据结果②:列表,数据框, 因子
列表
列表最大的好处就是,它能够将多个不同类型的对象打包到一起,使得可以根据位置和名字访问它们。
list()
常使用$提取内容
使用[]提取对象内容时,类型仍然是对象, [[]]提出对象的下一级:
数据框
tibble()创建:
tribble() 按行录入数据式创建tibble
as_tibble()转换数据为tibble
数据框是由列向量组成、有着矩阵形式的列表。
R中自带的数据框是data.frame , 但是建议改为tibble. 这是由Hardley提出的新取代方法。
并且Tidyverse对所有的数据框操作使用tibble.
Tibble的优点:
可以以列表方式提取数据框的元素和子集
以矩阵方式提取数据框的元素和子集,这和我们平时使用矩阵提取的方式相同。
####### 筛选按列名属于集合{x, y, w}来选df的列, 并选择前两行:
ind = names(df) %in% c("x", "y", "w")
df[1:2, ind]
str() 显示对象的结构
glimpse()
summary()作用在数据框上,可以生成各列/行的汇总信息
expand.grid(), 可以生成多个属性水平值得所所有组合
1.3.3 因子(factor)
变量分为定量和定性数据。
定性的可以分为名义型和有序型(与好坏之分),这类数据使用因子。
因子:factor(x, levels, labels, ordered, ...)
转变为因子型后,数据向量显示出来的与原来一样,但是内在存储已经变了。
其他有用函数
table()### 统计各水平出现次数
cut(x, breaks, lables,...)
gl()函数,用于多因素试验设计, 用该函数生成多个因素完全组合,基本格式如下:
gl(水平,重复数, 总长度,因子的名称)
forcats包专门处理因子水平
as_factor(), fct_count():计算各个水平, fct_c():合并
1.4 数据结果③:字符串,日期时间
#########字符串
是用双引号或单引号括起来的若干字符,建议用双引号。
tidyverse 系列中的stringr 包提供了一系列接口一致的、简单易用的字符串操作函数。
字符串的长度
字符串的合并
字符串的拆分
字符串的格式化输出
使用函数str_glue(), str_glue_data()就可以将字符串中变量名替换成变量值。
字符串的排序
str_sort(x, decreasing, locale, ...) ###返回排好序的元素
str_order(x, decreasing, locale, ...) ###返回排好序的索引
locale是设定语言,默认为en英语
字符串的检测匹配
字符串子集的提取
str_sub(字符, start, end)
提取匹配的内容
修改字符串
字符串其他函数
日期时间
日期时间值通常以字符串形式传入R 中,然后转化为以数值形式存储的日期时间变量。
lubridate包供了更加方便的函数,生成、转换、管理日期时间数据。
无论年月日/时分秒按什么顺序及以什么间隔符分隔,总能正确地识别成日期时间值:
格式化输出日期时间 - format()函数
给定模板格式输出:
提取日期时间数据的组件
使用with_tz()将时间数据转换为另一时区的同一个时间
force_tz() 将时间数据的时区强制转换为另一个时区
模糊提取到不同的时间单位
round_date(t, unit = "hour")