R语言学习4:函数,流程控制,数据框重塑
本系列是一个新的系列,在此系列中,我将和大家共同学习R语言。由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成。
参考教材:《R语言实战》第二版(Robert I.Kabacoff),书中所提到的John Cook的优秀博文,关于代码规范的《来自Google的R语言编码风格指南》。
Part 1:函数
Section 1:数学与统计函数
数学函数用于对数据作变换。
| 函数 | 描述 |
|---|---|
abx(x) |
绝对值 |
sqrt(x) |
平方根 |
ceiling(x) |
天花板,不小于x的最小整数 |
floor(x) |
地板,不大于x的最大整数 |
trunc(x) |
截尾,向\(0\)的方向截取x的整数部分 |
round(x, digits=n) |
四舍五入,保留\(n\)位小数 |
signif(x, digits=n) |
四舍五入,保留\(n\)位有效数字 |
cos(x), sin(x), tan(x) |
三角函数 |
acos(x), asin(x), atan(x) |
反三角函数 |
cosh(x), sinh(x), tanh(x) |
双曲三角函数 |
acosh(x), asinh(x), atanh(x) |
反双曲余弦函数 |
log(x, banse=n) |
对数\(\log_{n}(x)\) |
log(x), log10(x) |
自然对数\(\ln(x)\)和常用对数\(\lg(x)\) |
exp(x) |
指数函数 |
统计函数常用于对数据作变换或统计,以下函数,许多都有如na.rm之类的可选参数,可以使用?function来查询。
| 函数 | 描述 | 应用 |
|---|---|---|
mean(x) |
平均数 | mean(c(1, 2, 3, 4))返回2.5 |
median(x) |
中位数 | median(c(1, 2, 3, 4))返回2.5 |
sd(x) |
标准差 | sd(c(1, 2, 3, 4))返回1.29 |
var(x) |
方差 | var(c(1, 2, 3, 4))返回1.67 |
mad(x) |
绝对中位差 | mad(c(1, 2, 3, 4))返回1.48 |
quantile(x, probs) |
求分位数 | x是数值向量,probs是概率值向量 |
range(x) |
求值域 | range(c(1, 2, 3, 4))返回c(1, 4) |
sum(x) |
求和 | sum(c(1, 2, 3, 4))返回10 |
diff(x, lag=n) |
滞后差分 | diff(c(1, 5, 23, 29))返回c(4, 18, 6) |
min(x) |
求最小值 | min(c(1, 2, 3, 4))返回1 |
max(x) |
求最大值 | max(c(1, 2, 3, 4))返回4 |
scale(x, center=TRUE, scale=TRUE) |
按列标准化 | center进行中心化,scale进行标准化 |
这里方差的计算是无偏的,即
\]
Section 2:概率函数
在R语言中,概率函数是由d, p, q, r再加上分布的名字缩写所构成的函数,这四个字母分别具有如下的意义:
d:密度函数(density)。p:分布函数(distribution function)。q:分位数函数(quantile function),第一个参数为q,代表要求的(下侧)分位点\(\alpha\)。r:生成随机数,第一个参数为n,代表要生成的随机数个数。
分布的名字如下表所示,按字母顺序排序:
| 分布名 | R中缩写 |
|---|---|
| Beta分布 | beta |
| 二项分布 | binom |
| 柯西分布 | cauchy |
| 卡方分布 | chisq |
| 指数分布 | exp |
| F分布 | t |
| Gamma分布 | gamma |
| 几何分布 | geom |
| 超几何分布 | hyper |
| 对数正态分布 | lnorm |
| Logistic分布 | logis |
| 多项分布 | multinom |
| 负二项分布 | nbinom |
| 正态分布 | norm |
| 泊松分布 | pois |
| Wilcoxon符号秩分布 | signrank |
| t分布 | t |
| 均匀分布 | unif |
| Weibull分布 | weibull |
| Wilcoxon秩和分布 | wilcox |
每个分布都有其可选参数,可以通过?function查询。
设定种子可以让结果可复现,在R语言中,set.seed()函数可以显式指定这个种子。
生成多元正态随机数,可以使用mvrnorm(n, mean, sigma)函数,这里mean是均值向量,sigma是协方差矩阵或相关矩阵。
Section 3:其他实用函数
这里介绍一些其他实用的函数。
length(x)返回对象x的长度。如果x是向量,则返回向量长度;如果x是数据框,则返回变量个数(而不是观测个数),不过要返回数据框的相关信息,最好使用ncol来返回变量个数,nrow来返回观测个数。
seq(from, to, by)函数用于生成一个等差序列,包含from和to,这里by是间距;rep(x, n)将对象x重复n次用于生成一个重复序列;pretty(x, n)将一个连续型变量x通过美观的分割点,分割为近似n个区间。
cut(x, n)将连续型变量x分割成有n个水平的因子,使用选项ordered_result=TRUE可以创建有序型因子。
cat(...)连接...中的对象,并将其输出到屏幕上或文件中,常用于打印字符串,可以用sep指定分隔符,默认为空格。字符串中具有如下的转义字符:\n换行、\t制表符、\'单引号,\b退格等等。
apply(x, MARGIN, FUN, ...)函数允许将任意一个函数应用到矩阵、数组、数据框的任何维度上,这里x是数据对象,MARGIN是维度的下标,矩阵和数据框中MARGIN=1代表行,MARGIN=2代表列,FUN是要运用的函数名。如果要运用的函数还有其他参数,可以在...处指定。
t(x)可以对数据框或者矩阵x进行转置,当x为数据框时,行名将成为转置后的变量名。aggregate(x, by, FUN)是整合函数,类似于SQL中的GROUP BY,这里by是待折叠的变量名,必须在一个列表中(即使只有一个变量),FUN是用于处理整合的函数。
Part 2:其他控制
Section 1:循环与条件结构
循环结构for的语法是:
for (var in seq){
statement
}
循环结构while的语法是:
while (cond){
statement
}
在处理大数据集中的行和列时,R中的循环比较低效费时,最好联合使用R的内置函数和apply族函数。
条件结构if-else的语法是:
if (cond){
statement1
}
else{
statement2
}
else的部分可以没有。以上结构可以紧凑地写成ifelse版本,语法为:
ifelse(cond, statement1, statement2)
这类似于一个三目运算符,如果生成的结果都是向量,使用ifelse更合适。
条件结构switch可以根据一个表达式的值来选择语句执行,语法为:
switch(
expr,
value1 = statement1,
value2 = statement2,
...
)
需要注意的是,如果expr的值是一个字符串,则value1, value2等值的内容也是字符串,但是不需要加引号。
Section 2:自编函数
R中使用function函数来自编函数,为了尽可能返回丰富的信息,返回值经常是一个列表,用于存储一系列对象。语法如下:
myfunction <- function(arg1, arg2, ...){
statement
object <- list(value1=value1, value2=value2, ...) # 这句是不一定需要的
return(object) # 如果没有return()则最后一行代码的返回值作为return的内容
}
Section 3:使用reshape2重构数据集
reshape2包是一套重构和整合数据集的万能工具,需要使用前安装:
install.package("reshape2")
library(reshape2)
将使用如下的数据框进行处理。
ID <- c(1, 1, 2, 2)
Time <- c(1, 2, 1, 2)
X1 <- c(5, 3, 6, 2)
X2 <- c(6, 5, 1, 4)
mydata <- data.frame(ID, Time, X1, X2)

使用该包对数据集进行处理,需要先对数据集进行融合(melt),再进行重铸(cast)。融合使用函数melt(x, id),x是待融合的数据框,id则是数据框的主键,输出一个新的数据框:每个测量变量独占一行,行中包含确定这个测量变量所需的标识符。此时,融合数据框操作的代码为
md <- melt(mydata, id=c("ID", "Time"))
得到的结果是

可以对融合后的数据框使用dcast()函数进行重铸,调用格式是dcast(md, formula, fun.aggregate),这里md是已融合的数据,formula接受一个公式,描述了最后的想要结果,公式的形式是
\]
这里,rowvar中的变量作为主键,colvar中的变量作为数据框的值,返回的数据框包含所有的rowvar和colvar作为变量。fun.aggregate参数是可选的整合函数。

R语言学习4:函数,流程控制,数据框重塑的更多相关文章
- R语言学习 第三篇:数据框
数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同.数据框的每列 ...
- R语言数据分析利器data.table包—数据框结构处理精讲
R语言数据分析利器data.table包-数据框结构处理精讲 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代 ...
- Go语言学习之3 流程控制、函数
主要内容: 1. strings和strconv使用2. Go中的时间和日期类型3. 指针类型4. 流程控制5. 函数详解 1. strings和strconv使用 //strings . strin ...
- R语言数据分析利器data.table包 —— 数据框结构处理精讲
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理 ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- 利用R语言制作出漂亮的交互数据可视化
利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...
- R语言学习 第九篇:plyr包
在数据分析中,整理数据的本质可以归纳为:对数据进行分割(Split),然后应用(Apply)某些处理函数,最后将结果重新组合(Combine)成所需的格式返回,简单描述为:Split - Apply ...
- R语言学习笔记:向量
向量是R语言最基本的数据类型. 单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量. x <- c(1, 2, 4, 9) x <- c(x[1:3], 88, x[4] ...
- R语言学习笔记(八):零碎知识点(16-20)
16--complete.cases( ) complete.case()可以判断对象中是否数据完全,然后返回TRUE, FALSE 这一函数在去除数据框中缺失值时很有用. > d kids a ...
随机推荐
- windows10与linux进行ftp遇到550 Failed to change directory及553 Could not creat file
第一个原因: 没有权限,可以使用带有l参数的ls命令来看文件或者目录的权限 ls -l 解决:给本地用户添加一个可写权限 chmod +w /home/student ##给对应的本地用户添加一个可写 ...
- 神奇C语言的字串处理库函数
头文件:#incldue<string.h> 定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该函数返回str2在str1中首次出现的地 ...
- o2,o3优化
#pragma GCC optimize(2)//O2优化 #pragma GCC optimize(3,"Ofast","inline")//O3优化
- - Visible Trees HDU - 2841 容斥原理
题意: 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树 题解: 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到.不互质的话说明前 ...
- XML、DTD约束
XML的作用: xml现在主要用于配置文件 文档声明: 如果你使用记事本打开文档,此时如果记事本默认保存数据到硬盘根据的是"GB2312"编码,这个时候如果你在xml文档源码中en ...
- 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.6.2时出现此问题
https://blog.csdn.net/inchat/article/details/104294302
- Dapr是如何简化微服务的开发和部署
基于微服务设计模式的现代应用程序面临着一系列挑战.微服务需要有一个强大的服务发现机制来实现动态连接.它们需要松散耦合,实现自主性和独立缩放.微服务需要支持多种语言,其中每个服务都是以最合适的语言.框架 ...
- Leetcode(2)-两数相加(包含链表操作的注意事项)
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- QUIC协议文档翻译——什么是QUIC
原文地址https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit QUIC是一个谷歌提出 ...
- Subresource Integrity,SRI,Cross-Origin Resource Sharing (CORS),子资源的完整性检查,Subresource Integrity checking,CORS,Ajax
SRI https://code.jquery.com/ SRI是一种新的W3C规范,它允许Web开发人员,以确保托管在第三方服务器上的资源是没有被篡改的.SRI的使用,建议作为最佳实践,每当库从第三 ...