向量运算

R的强大功能之一就是把整个数据向量作为一个单一对象来处理。一个数据向量仅是数字的排列,一个向量可以通过如下方式构造

weight<-c(2,34,434,53)
weight
[1] 2 34 434 53

结构c(……)用来构造向量。这既不是R中输入向量的唯一方法,也不是一般首选的方法。

如果要对上述变量做数学运算,则是逐个元素的方式进行。

作图

plot(height,weight,pch=2)

关键字pch(绘图符号)改变绘图符号

函数lines将通过一条直线将(x,y)值增加到现有的图中

生成向量的函数

这里介绍3个函数:c、seq和rep,用于不同情形下向量的创建。

第一个函数c,它是“concatenate”(连接)的简写,含义是把各分项首尾连接

另外也有可能给某些元素命名。这改变了变量输出的方式,这样做通常是出于显示的目的。

> x<-c(red="Huey",blue="Dewey",green="Louie")
> x
red blue green
"Huey" "Dewey" "Louie"

名称可以被提取或使用names设置

> names(x)
[1] "red" "blue" "green"

一个向量的所有元素类型都相同。如果你连接不同类型的向量,它们将被转化为最少“限制”的类型:

> c(FALSE,3)
[1] 0 3
> c(pi,"abc")
[1] "3.14159265358979" "abc"
> c(FALSE,"abc")
[1] "FALSE" "abc"

也就是说,逻辑值被转换为0/1或“False”/”True”,数字转换为它们的输出形式的字符串。

第二个函数seq(“sequence”),用来建立数字等差序列,如

> seq(4,9)
[1] 4 5 6 7 8 9

如果希望间距是2,

> seq(4,10,2)
[1] 4 6 8 10

第三个函数rep(“replicate”),用来产生重复值。使用时有两个参数,依赖于第二个参数是一个向量还是一个数字,产生的结果会有不同

> oops<-c(7,9,13)
> rep(oops,3)
[1] 7 9 13 7 9 13 7 9 13
> rep(oops,1:3)
[1] 7 9 9 13 13 13

第一个rep哈桑农户对整个向量oops重复三次。第二次调用用一个有3个值(1,2,3)的向量代替数字3;这些值相应于oops向量的每一个元素,意味着7重复1次,9重复2次,13重复3次。

矩阵和数组

矩阵就是一个二维数值数组。

> x<-1:12
> dim(x)<-c(3,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12

创建矩阵的一个方便的方法是使用matrix函数:

matrix(1:12,nrow=3,byrow=T)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12

请注意,这里byrow=T将矩阵改变成以按行而不是按列形式填充。

对矩阵进行操作的有用函数包括rownames、colnames、转置函数t

> x<-matrix(1:12,nrow=3,byrow=T)
> rownames(x)<-LETTERS[1:3]
> x
[,1] [,2] [,3] [,4]
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12
> t(x)
A B C
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12

特征i向量LETTERS是一个包含大写字母A——Z的内置变量。其他有用的相似变量是分别表示小写字母、月份名称、月份名称缩写的letters、month.name和month.abb

可以按行或者按列分别使用cbind和rbind函数将向量“粘”到一起。

> cbind(A=1:4,B=5:8,C=9:12)
A B C
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> rbind(A=1:4,B=5:8,C=9:12)
[,1] [,2] [,3] [,4]
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12

因子

分类变量在统计数据中是常见的,表明数据的某些细分属性,如社会阶层、主要诊断、肿瘤分期、青春期阶段等。通常它们用数字代码输入。

在R中,这些变量被指定为因子。这种数据结构使得不同的分类类别被赋予有意义的名称成为可能。

对R来说,区分类别编码和取值有直接数字含义的变量是最基本的。

术语说一个因子有一系列水平——比方说4个水平。一个四水平因子包含两项含义:a)1到4之间整数的一个向量b)一个长度为4的包含字符串的特征向量

看一个例子:

> pain<-c(0,3,2,2,1)
> fpain<-factor(pain,levels=0:3)
> levels(fpain)<-c("none","mild","medium","severe")

第一个命令创建了一个数值向量pain,对5个病人的疼痛水平编码。我们希望把他作为一个分类变量处理,所以我们通过它利用函数factor创建一个因子fpain。它的调用除了pain以外,还跟着另一个参数即levels=0:3,这意味着输入的编码使用了4个值0~3.后者在理论上可以省略,因为R默认使用pain中合理排序的值,但保留它是一个很好的习惯,如下所示。最后一行的作用是将水平名称转换为特定的4个字符串.

> fpain
[1] none severe medium medium mild
Levels: none mild medium severe
> as.numeric(fpain)
[1] 1 4 3 3 2
> levels(fpain)
[1] "none" "mild" "medium" "severe"

函数as.numeric提取数字编码为1~4,levels提取水平的名称。注意根据数字0~3的原始输入编码不显示了,一个因子的内置表达方式始终是从1开始的数字。

列表

可以通过函数list创建一个列表。

> intake.pre<-c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770)
> intake.post<-c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335)
> mylist<-list(before=intake.pre,after=intake.post)
> mylist
$before
[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770 $after
[1] 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335

列表各部分通过list中使用的参数名称来命名。命名的部分可以如下提取:

mylist$before
[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770

数据框

数据框被称为“数据矩阵”或“数据集”。它是一系列等长度的向量和/或因子,它们交叉相关,使得同一位置的数据来自同一试验单元(对象、动物等)。除此之外,它具有唯一的一组行名称。

> d<-data.frame(intake.pre,intake.post)
> d
intake.pre intake.post
1 5260 3910
2 5470 4220
3 5640 3885
4 6180 5160
5 6390 5645
6 6515 4680
7 6805 5265
8 7515 5975
9 7515 6790
10 8230 6900
11 8770 7335

像list一样,组分(单个变量)可以通过$符号获得:

> d$intake.pre
[1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770

索引

如果需要向量中一个具体的元素

>intake.pre[5]
[1] 6390

方括号用来选择数据,也称为索引或子集选择

如果希望一个包含多于一个的数据的子向量,比如序号为3、5、7、可以用一个向量来索引:

> intake.pre[c(3,5,6)]
[1] 5640 6390 6515

R的一个巧妙功能是可以使用负索引。可以通过下式得到除了位置为3、5、7之外的所有其他元素

> intake.pre[-c(3,5,6)]
[1] 5260 5470 6180 6805 7515 7515 8230 8770

排序

对向量排序,只需使用sort函数即可

> sort(intake.post)
[1] 3885 3910 4220 4680 5160 5265 5645 5975 6790 6900 7335

然而,仅对一个单一的向量排序并不总能满足需求。经常需要根据某些其他变量的值对一系列变量排序——如果根据性别和年龄对血压排序。为此目的,有一个结构看上去很抽象,但确实功能强大。首先计算一个变量的次序。

order(intake.post)
[1] 3 1 2 6 4 7 5 8 9 10 11

结果是数字1至11(或者其他的向量长度),根据order参数(这里是intake.post)的大小排序。对order结果的解释优点棘手——应该是如下所述:通过将其值依次置于3、1、2、6等对intake.post排序。

o<-order(intake.post)
> intake$post[o]
[1] 3885 3910 4220 4680 5160 5265 5645 5975 6790 6900 7335

R语言(一)的更多相关文章

  1. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  2. R语言环境安装与基本使用

    R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...

  3. R语言绘制空间热力图

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...

  4. [R]R语言中的%>%和%.%

    最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...

  5. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  6. 用R语言的quantreg包进行分位数回归

    什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...

  7. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  8. R语言-处理异常值或报错的三个示例

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...

  9. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

  10. R语言-Kindle特价书爬榜示例 & 输出HTML小技巧

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元 ...

随机推荐

  1. Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python

    Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...

  2. Avira Free Antivirus 小红伞免费杀毒软件广告去除工具

    Avira Free Antivirus 小红伞免费杀毒软件经常跳出广告, 用起来比较烦, 这里提供一个广告去除的免费小工具. 原理就是用组策略来阻止广告的跳出, 网上到处都是. 一键傻瓜式去除, 也 ...

  3. spark-streaming-kafka-0-10源码分析

    转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/7767621.html 本文所研究的spark-streaming代码版本为2.3.0-SNAPSHO ...

  4. iOS10开发需要注意的一些问题(转)

    兼容iOS 10 资料整理笔记 2016-09-17 判若两人丶 CocoaChina ▲点击上方“CocoaChina”关注即可免费学习iOS开发 原文链接:http://www.jianshu.c ...

  5. jQuery导入代码片段并绑定事件

    a.html <div> <button class="button" >点我达</button> </div> b.html &l ...

  6. UVA - 11584 划分字符串的回文串子串; 简单dp

    /** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...

  7. mysql explain22222 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

    MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. .使用explain语句去查看分析结果 如explain ...

  8. Linux 进程创建二(execve和wait)

    三:execve系统调用 int execve(const char *filename, char *const argv[],char *const envp[]); fork创建了一个新的进程, ...

  9. 把world转成html

    本来用php转的 效果不太理想 很不稳定 最后试了下java 效果不错 只记录java的方法好了 其实他们的原理都是一样的啊,都是用到了微软的com 首先是准备工作 下载(明确dll的版本是64位的还 ...

  10. Photoshop脚本之jpg转换成eps

    function saveEPS( doc, saveFile ) { var saveOptions = new EPSSaveOptions( ); saveOptions.encoding = ...