上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换。众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需要,于是向量,矩阵,数组,数据框等变量类型应运而生。

向量:与我们在数学里面所学到的向量不同,R语言中的向量类似于我们在C语言中学习的数组,表示一个同种数据类型的数据集。

向量的创建:在R语言中使用c( )命令就创建了一个向量,任何类型的数据都可以组成向量,但一个向量里面的数据最好类型一致,不然会发生一些变化。向量里面的元素用","分隔。由此可见,当数值型,字符型,逻辑型的数据放在同一个向量时,字符型优先级高于数值型高于逻辑型,逻辑型的TRUE转为数值型的1,逻辑型的FALSE转为数值型的0

> a <- c(1,2,3,4,5)
> a
[1] 1 2 3 4 5
> b <- c("a","b","c","d")
> b
[1] "a" "b" "c" "d"
> c <- c(1,2,"c",4,5)
> c
[1] "1" "2" "c" "4" "5"
> d <- c(1,2,3,TRUE,4,5)
> d
[1] 1 2 3 1 4 5
> e <- c("a",TRUE,"c","d")
> e
[1] "a" "TRUE" "c" "d"

向量的元素个数:与计算字符串字符个数的函数nchar( )以及str_lenth( )不同,函数length( )用来计算向量中元素的个数。

向量的读取:向量在创建过程中,系统就自动给向量里的每个元素都分配了一个索引(1~N,N为向量中元素个数,这与C语言,Python中都不同

读取时用c[ m ]来读取向量c中第m个向量

用c[ m:n ]读取向量c中第m到n个向量

用c[x(m:n)]来表示读取m到n的数乘以x,即c[2*(1:5)]就是读取2*(1,2,3,4,5),也即第2,4,6,8,10五个数

> a <- c(1,2,3,4,5)
> length(a)
[1] 5
> a[3]
[1] 3
> a[2:4]
[1] 2 3 4
> a[2*(1:5)] #不存在的数用NaN表示
[1] 2 4 NA NA NA

向量的计算:数值型的向量计算遵循计算法则,长度不同会警告,同时短的向量会顺次从第一位开始填充到与长的向量相同的长度,开始运算。有关单个数值相关的计算都可以用到向量中,来进行整组相同的运算。

> a <- c(1,2,3,4,5)
> b <- c(3,1,4,6,2)
> a+b
[1] 4 3 7 10 7
> a-b
[1] -2 1 -1 -2 3
> a*b
[1] 3 2 12 24 10
> a/b
[1] 0.333 2.000 0.750 0.667 2.500
> a.^2
Error: object 'a.' not found
> a^2
[1] 1 4 9 16 25
> log2(a)
[1] 0.00 1.00 1.58 2.00 2.32
> sqrt(a)
[1] 1.00 1.41 1.73 2.00 2.24
> a <- c(1,2,3,4,5)
> c <- c(2,7,8)
> a+c
[1] 3 9 11 6 12
Warning message:
In a + c : longer object length is not a multiple of shorter object length

其他类型的向量,比如字符型以及逻辑型不能进行上述运算

逻辑型向量与数值型向量还能进行逻辑运算,返回值为布尔型

> a <- c(1,2,3,4,5)
> b <- c(3,1,4,6,2)
> d <- c("a","b","c")
> e <- c("d","e","f")
> d+e
Error in d + e : non-numeric argument to binary operator
> a+d
Error in a + d : non-numeric argument to binary operator
> d & e
Error in d & e :
operations are possible only for numeric, logical or complex types
> a & b
[1] TRUE TRUE TRUE TRUE TRUE
> f <- c(TRUE,TRUE,FALSE,FALSE,TRUE)
> a & f
[1] TRUE TRUE FALSE FALSE TRUE

与向量相关的其他函数:最小值min、最大值max、返回最大值与最小值range、谁是最小值which.min、谁是最大值which.max、求和sum、所有向量元素的乘积prod、向量元素排序sort、向量元素平均值mean、样本方差var,数据统计summary

> a <- c(1,2,3,4,5)
> min(a)
[1] 1
> max(x)
[1] 0.873
> range(a)
[1] 1 5
> which.min(a)
[1] 1
> which.max(a)
[1] 5
> sum(a)
[1] 15
> prod(a)
[1] 120
> sort(a)
[1] 1 2 3 4 5
> sort(a,decreasing = TRUE)
[1] 5 4 3 2 1
> mean(a)
[1] 3
> var(a)
[1] 2.5
> summary(a)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1 2 3 3 4 5

矩阵:矩阵相当于我们在C语言中学习的二位数组,只不过在R语言中对矩阵的处理比在C语言中要方便快速得多

矩阵的创建:

常用matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

参数含义如下:

data:矩阵的元素,默认为NA,即未给出元素值的话,各项为NA

nrow:矩阵的行数,默认为1;

ncol:矩阵的列数,默认为1;

byrow:元素是否按行填充,默认按列;

dimnames:以字符型向量表示的行名及列名,dimnames( )可以跟参数,参数需为向量格式,第一个向量为行名,第二个向量为列名

> mydata <- c(1:20)
> mydata
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> myarray <- matrix(mydata,nrow = 4,ncol = 5)
> myarray
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> cnames <- c("C1","C2","C3","C4","C5")
> rnames <- c("R1","R2","R3","R4")
> myarray <- matrix(mydata,nrow = 4,ncol = 5,dimnames = list(rnames,cnames))
> myarray
C1 C2 C3 C4 C5
R1 1 5 9 13 17
R2 2 6 10 14 18
R3 3 7 11 15 19
R4 4 8 12 16 20
> myarray2 <- matrix(mydata,nrow = 4,ncol = 5,byrow = TRUE,dimnames = list(rnames,cnames))
> myarray2
C1 C2 C3 C4 C5
R1 1 2 3 4 5
R2 6 7 8 9 10
R3 11 12 13 14 15
R4 16 17 18 19 20

矩阵的拼接:用rbind(用列拼接,拼接后的列数跟两矩阵相同)函数或者cbind(用行拼接,拼接后的行数跟两矩阵相同)函数可以将两个向量或者矩阵合并为一个矩阵。注意需要拼接的两个矩阵对应行和列的数量要相等,并且如果有行名和列名的话,要求对应行行名和列名也必须相同

> mydata <- c(1:20)
> mydata
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> cnames <- c("C1","C2","C3","C4","C5")
> rnames <- c("R1","R2","R3","R4")
> myarray <- matrix(mydata,nrow = 4,ncol = 5)
> myarray
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> myarray <- matrix(mydata,nrow = 4,ncol = 5,dimnames = list(rnames,cnames))
> myarray
C1 C2 C3 C4 C5
R1 1 5 9 13 17
R2 2 6 10 14 18
R3 3 7 11 15 19
R4 4 8 12 16 20
> myarray2 <- matrix(mydata,nrow = 4,ncol = 5,byrow = TRUE,dimnames = list(rnames,cnames))
> myarray2
C1 C2 C3 C4 C5
R1 1 2 3 4 5
R2 6 7 8 9 10
R3 11 12 13 14 15
R4 16 17 18 19 20
> myarray3 <- matrix(c(1:15),nrow=3,ncol=5)
> myarray3
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> myarray4 <- matrix(c(1:15),nrow=3,ncol=5,dimnames=list(c("R11","R12","R13"),cnames))
> myarray4
C1 C2 C3 C4 C5
R11 1 4 7 10 13
R12 2 5 8 11 14
R13 3 6 9 12 15
> cbind(myarray2,myarray4) #按行进行组合,行数不一致,分别为3和4
Error in cbind(myarray2, myarray4) :
number of rows of matrices must match (see arg 2)
> rbind(myarray2,myarray4) #按列进行组合
C1 C2 C3 C4 C5
R1 1 2 3 4 5
R2 6 7 8 9 10
R3 11 12 13 14 15
R4 16 17 18 19 20
R11 1 4 7 10 13
R12 2 5 8 11 14
R13 3 6 9 12 15
>matrix(c(1:16),nrow=4,ncol=4,dimnames=list(c("R11","R12","R13","R14"),c("C11","C12","C13","C14")))
> myarray5
C11 C12 C13 C14
R11 1 5 9 13
R12 2 6 10 14
R13 3 7 11 15
R14 4 8 12 16
> rbind(myarray2,myarray5) #按列进行组合,列名不一致
Error in rbind(myarray2, myarray5) :
number of columns of matrices must match (see arg 2)

矩阵元素的读取:跟向量读取差不多,多加了一个列的索引而已

常用为c[a,b],意为读取第a行b列的数据

也可以使用c[,b]读取第b列整个列的数据,返回值为向量

> myarray5[2,3]
[1] 10
> myarray5[,3]
R11 R12 R13 R14
9 10 11 12

矩阵操作中常用的函数:
+, -, * , /       矩阵的四则运算,对应位置的元素进行运算要求矩阵的维数必须相同
t()                矩阵的行列转置
colSums()    分别对矩阵的每一列进行求和
rowSums()   分别对矩阵的每一行进行求和
colMeans()   分别对矩阵的每一列进行求平均值
rowMeans()  分别对矩阵的每一行进行求平均值
det()             解方程的行列式
crossprod()   解两个矩阵的内积
outer()          解两个矩阵的外积,又叫叉积%*%矩阵乘法,要求第一个矩阵的列数与行数相同
diag()            对矩阵取对角元素,若对象为向量(不管有没有缺失值),则生成以向量为对角元素的对角矩阵
solve()          在矩阵可逆的情况下,对矩阵求逆矩阵
eigen()          对矩阵求解特征值和特征向量

Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的。Data Frame每一列有列名,每一行也可以指定行名。如果不指定行名,那么就是从1开始自增的Sequence来标识每一行。

数据框的创建:使用data.frame( )函数。函数里面的每一个参数包含列索引与对应的值

student<-data.frame(ID=c(11,12,13),Name=c(“Devin”,”Edward”,”Wenli”),Gender=c(“M”,”M”,”F”),Birthdate=c(“1984-12-29″,”1983-5-6”,”1986-8-8”))
另外也可以使用read.table()或者read.csv()读取一个文本文件,返回的也是一个Data Frame对象。

R语言数据结构二的更多相关文章

  1. #r语言(二)笔记

    #r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...

  2. 第二章 R语言数据结构

    R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...

  3. R语言入门二

    一.R语言应知常用函数 1.getwd() 函数:获取工作目录(同eclipse设置workspace类似),直接在R软件中使用,如下图: 2.setwd(dir=”工作目录”) 函数:设置R软件RS ...

  4. 从零开始学习R语言(二)——数据结构之“因素(Factor)”

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/60101041 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  5. R语言-数据结构

    1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two&q ...

  6. R语言数据结构

    5. 数据结构 5.1 数据结构简介 (1)向量 一个向量的所有元素必须有相同的类型(模式) (2)列表 列表可以非同质的 列表可按位置索引:lst[[2]] 抽取子列表:lst[c(2,5)] 列表 ...

  7. R语言数据结构一

    R是面向对象的语言,它跟其他编程语言的数据类型差不多,有四种,分别为:数值型,复数型,逻辑性和字符型 数值型:即数字,分为整数型和双精度型.数字可以用科学技术法表示,形式为Xe+m,意为x乘10的m次 ...

  8. R语言基础(二) 可视化基础

    > which.max(apply(x[c("x1","x2","x3")], 1, sum))49 > x$num[which ...

  9. R语言分析(二)——薛毅R语言第二章后面习题解析

    包括2.2—2.6中间的习题,2.2的习题中第三问和第四问,应该有其他的解答方法,但我看他的题目,似乎是在A和B的基础上进行,所以就选择了使用for循环的方法 做着习题,又不断查着书,这样,书籍也熟悉 ...

随机推荐

  1. linux 挂载命令mount、umount

    mount /bin/mount语法:mount [-t文件系统] 设备文件名 挂载点mount -t iso9660 /dev/sr0 /mnt/cdromiso9660是固定的,光盘:所以 -t ...

  2. eclipse使用git命令行

    idea自带git命令,可以很方便的进行提交代码.eclipse怎么做呢,下面我简单操作一下: 第一步: 第二步: 第三步: 这样就调出来git提交的命令窗口了: 运行成功如下: 注意: git的安装 ...

  3. pycharm安装激活及简单设置

    (1)在激活界面的License server输入:http://idea.liyang.io/:或者:点击help→Register→License sever ,输入http://idea.liy ...

  4. Asp.net mvc Kendo UI Grid的使用(三)

    上一篇的操作已经能够显示基本数据了,这次介绍一下如何进行数据操作以及显现自定义命令. 第一步当然还是准备数据: [HttpPost] public ActionResult PersonalList_ ...

  5. PHP生成随机或者唯一字符串

    本文出至:新太潮流网络博客 /** * [生成随机字符串] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http://blog.i ...

  6. Intel Nehalem微架构Calpella平台机型Windows XP系统下如何开启AHCI硬盘工作模式(XP系统下如何加载AHCI驱动)

    问题描述用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启的问题,咨询如何在XP下加载AHCI驱动,以便开启BIOS中AHCI选项来发挥硬盘的最佳性能   问题分析 Windo ...

  7. MdelForm 和formset

    我们以前接触过Form组件就是堆你的字段进行校验的  现在我来看看ModelForm ModelForm比你的Form方便了一万倍 from django import forms 生成form类 c ...

  8. REST Framework 的用户认证组件

    用户认证流程: 我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件 认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否 ...

  9. iOS设计模式 - 责任链

    iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  10. Redis学习---Redis操作之List

    List操作,redis中的List在在内存中按照一个name对应一个List来存储 lpush(name,values) --> 实际上是左添加 # 在name对应的list中添加元素,每个新 ...