R语言基础学习(1)-----对象及其模式和属性

对象

R是一种基于对象的语言,所有变量、数据、函数及其结果等都以对象的形式存储,所有的对象都有两个内在属性:类型(mode),长度(length)
一个对象所有元素都是同一种基本类型,称这个对象为单纯对象
一个对象所有元素不是同一种基本类型,称这个对象为复合对象

1.对象的类型分为:
①数值型numeric ②字符型character ③复数型complex ④逻辑性logical

NA代表缺失数据 NAN代表非数字类型 ,Inf代表∞ , -Inf代表-∞

可用is.xxx()函数判断是否为xxx类型的对象 可用as.xxx()函数强转为xxx类型的对象

2.对象的长度:
获取对象的长度可用length()函数,对象的长度可以修改,R允许超出对象长度的下标赋值,这时对象的长度自动伸长以包括此下标,其中间的元素设定为NA缺失值:

> y <- c(1:3)
> y
[1] 1 2 3
> y[6] <- 6
> y
[1]  1  2  3 NA NA  6

向量

向量vector()有两个参数:类型和长度,创建向量中元素的值取决于参数所指定的数据类型

1.向量的赋值
创建一个向量名为v的向量,可以使用c()函数来建立向量:

> v <- c(2,4,6,8)
> v
[1] 2 4 6 8
> assign('v',c(1,3,5,7))
> v
[1] 1 3 5 7

2.向量的运算
在算术表达式中使用向量,将会对该向量中的每一个元素都进行同样的算术运算。当表达式中的不同向量长度不一致时,短的向量将会被循环使用(可能只是部分元素)。

基本运算符包括+ - * / ^等等
也可以使用函数对向量进行运算:
①常用数学函数: log , exp , sin ,cos ,tan, sqrt等
max(), min(), sum() ,mean(), range(), length(), prod(), var(), sort() .等
③使用which函数 ,可以根据要求返回对应分量的下角标: which.min(v) 返回v中最小值的下角标。

3.产生有规律的序列
①可以用':'的方式实现 , 且在R中,':'的优先级最高

②seq()函数可以生成数列,其基本形式为:
seq(from=1, to=1, by= , length= ) from,to代表起始和终止,by代表步长,length代表长度。

③rep()函数是重复函数,其基本形式为:
rep(x, times) x代表向量数据,times代表重复的次数

④sequence()函数 可以创建一系列连续的整数序列,每个序列都以给定参数的数值结尾。

> sequence(3:5)
 [1] 1 2 3 1 2 3 4 1 2 3 4 5
> sequence(c(3,5))
[1] 1 2 3 1 2 3 4 5

⑤gl()函数 可以生成不同的水平(类型)数据,能产生规则的因子序列。该函数的语法为:
gl(n,k,length=n*k,;abels=seq_len(n),ordered=FALSE) n代表类别数,k代表每个类别重复的次数,length决定长度,labels代表水平因子名字,order代表是否排序。

> gl(2,4,labels=c('male','female'))
[1] male   male   male   male   female female female female
Levels: male female
> gl(2,4,length = 16)
 [1] 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2
Levels: 1 2

逻辑向量

逻辑向量元素可以被赋值为TRUE,FALSE(可以被简写为T和F,但建议使用TRUE和FALSE)。
逻辑向量可以由条件式产生,例如:

> temp <- x>5
> temp
[1] FALSE FALSE FALSE FALSE FALSE  TRUE

R中逻辑运算符包括> < >= <= == != 与运算& 或运算| 非运算!
all()函数可以判断一个逻辑向量中的分量是否都为TRUE,any()函数可以判断一个逻辑向量中是否存在一个TRUE值。

> all(temp)
[1] FALSE
> any(temp)
[1] TRUE

缺失数据NA

缺失数据NA是包括不可得到的数据(not available)与值丢失(missing value)的情况,任何含有NA数据的运算结果都是NA。
is.na()函数检验缺失数据,返回一个同等长度的向量,在缺失值处返回TRUE

> v <- c(1,3,5,7,NA)
> is.na(v)
[1] FALSE FALSE FALSE FALSE  TRUE

is.nan()函数检验是否为非数值类型,在非数值处返回TRUE
is.finite()判断数值是否有限,有限时返回TRUE
④is.infinite()判断数值是否无限,无限时返回TRUE

字符型向量

向量的元素取字符串时,需要用" "引起来,通过c()函数可以将几个字符向量连接为一个字符向量:

> A <- c('chenyu','haoran')
> B <- c('shi','shuaige')
> c(A,B)
[1] "chenyu"  "haoran"  "shi"     "shuaige"

paste()函数可以将任意多的参数一个接一个连成字符串,默认以一个单位空格符连接:

> paste('this','is','a','example')
[1] "this is a example"
> paste('this','is','a','example',sep = '-')
[1] "this-is-a-example"
> paste('page',1:3,sep = '-')
[1] "page-1" "page-2" "page-3"

向量的下标系统

下标系统可以用来有效且灵活的选择性访问一个对象中的元素。
tips: 在R语言中下标是从1开始计数的,而并非是从0开始
①取逻辑性值得下标向量
下标向量x必须和被挑选元素得向量v长度一致。

> v <- c(1:5,NA)
> v
[1]  1  2  3  4  5 NA
> x <- !is.na(v)
> x
[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
> v1 <- v[x]       #v1是一个含有 v 中不是缺失值且元素次序不变的对象
> v1
[1] 1 2 3 4 5
> (v+1)[(!is.na(v)& v>0)]        #将v中的向量都加一,并返回不是缺失值且大于0的对象
[1] 2 3 4 5 6

②取整数值的下标向量
下标为正整数时,代表取次序一致的元素;下标为负整数时,代表排除对应次序的元素:

> v[1:4]
[1] 1 2 3 4
> v[-2]
[1]  1  3  4  5 NA

3.取字符型值得下标向量
在定义向量时可以为元素加上名字,这样的向量可以用元素的名字来访问元素:

> apartment <- c(1,2,3)
> names(apartment) <- c('chenyu','zhaoxuan','shunshun')    #为元素加上名字
> apartment
  chenyu zhaoxuan shunshun 
       1        2        3 
> xiu <- apartment['shunshun']             #使用元素名字访问‘shunshun’
> xiu
shunshun 
       3        

因子

因子(factor)为处理分类数据提供了一种有效方法,它是对一个等长的其他向量元素进行分类(分组)的向量对象,主要适用于离散型随机变量

factor()函数用来把一个向量编码为因子,其一般形式为:
factor(x=character(), levels, labels=levels, exclude=NA, ordered=is.ordered(x))
x是向量,levels是水平,lavels可以用来指定各水平的标签,exclude用于指定要转换为缺省值NA的元素集合,ordered为TRUE表示因子水平为有序

> class <- c(1,2,2,3,5,1,2,3,5,1,2,3,5,1,2,3)
> f <- factor(class)
> f
 [1] 1 2 2 3 5 1 2 3 5 1 2 3 5 1 2 3
Levels: 1 2 3 5
> f <- factor(class,labels = 'class')
> f
 [1] class1 class2 class2 class3 class4 class1 class2 class3 class4 class1 class2 class3 class4 class1 class2 class3
Levels: class1 class2 class3 class4

levels()函数可以得到因子向量的水平,table()函数可以统计各个水平数据的频数

tapply()函数 可以按照因子向量的水平 分组计算统计量
tapply(x, INDEX, FUN=NULL, ... , simplify=TRUE)
x是对象,通常是一个向量,INDEX是因子向量(如果不是,自动转换为因子向量),FUN是需要计算的函数,如mean,sum,range等,simplify取TRUE则代表在一行内显示计算结果,否则分行。
tapply()的功能是对向量x按因子向量INDEX的水平分组计算函数FUN

在这里插入代码片

数组和矩阵

数组(array),可以看成带有多个下标类型相同的元素集合,array数组的构造具体格式为:
array(data= , dim=length(data), dimnames= )
data是一个数据向量,dim为维度向量,是一个正整数向量,表示数组各维的长度,dimnames代表各维度名字,默认为空。

> x <- array(1:20,dim=c(4,5))
> x
     [,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
> x[2:3,1:4]
     [,1] [,2] [,3] [,4]
[1,]    2    6   10   14
[2,]    3    7   11   15

矩阵(matrix)
矩阵,就是二维的数组。

矩阵除了用array()生成外,通常用matrix()函数,其格式为:
matrix(data= ,nrow=1, ncol=1, byrow=FALSE, dimnames=NULL)
data是数据向量,nrow代表行数,ncol代表列数,byrow代表是否按行放置矩阵的数据,dimnames代表数组维的名字。

> matrix(c(1:9),nrow=3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> matrix(c(1:9),nrow=3,byrow = TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

矩阵的运算
①对维数相同的矩阵可以进行四则运算(+ - * /),此时进行的是矩阵对应元素的四则运算
②常见的矩阵运算符和函数:

功能符号或函数
矩阵的乘法%*%
矩阵的转置t()
矩阵求逆运算solve()
矩阵求特征值和特征向量eigen()
矩阵的行列式det()
创建对角矩阵diag()
对矩阵A进行奇异值分解svd(A)

与数组(矩阵)运算的相关函数
①维度及维名字
dim()函数可以用于计算矩阵的维数,dimnames()用于获取矩阵的维的名字,同时也可以利用该函数对A的维进行命名。

> d <- matrix(c(1:12),3,4)
> d
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> dim(d)
[1] 3 4
> dimnames(d)
NULL
> dimnames(d) <- list(c('1','2','3'),c('x1','x2','x3','x4'))
> d
  x1 x2 x3 x4
1  1  4  7 10
2  2  5  8 11
3  3  6  9 12

此外,nrow()和ncol()函数可以用于获取矩阵的行数和列数;rownames()和colnames()用于获取行名和列名
②数组(矩阵)的合并与拉直
1.如果A是矩阵,则可以使用as.vector(A)将A矩阵拉直为向量。
rbind()表示按行上下合并向量或矩阵,cbind()表示按列左右合并向量或矩阵。

> m1 <- matrix(c(1:6),2,3)
> m1
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> m2 <- matrix(c(7:12),2,3)
> m2
     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12
> rbind(m1,m2)                  #按行上下来进行合并
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
[3,]    7    9   11
[4,]    8   10   12
> cbind(m1,m2)                 #按列左右来进行合并
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    5    7    9   11
[2,]    2    4    6    8   10   12
> as.vector(cbind(m1,m2))
 [1]  1  2  3  4  5  6  7  8  9 10 11 12
> c(cbind(m1,m2))
 [1]  1  2  3  4  5  6  7  8  9 10 11 12

列表和数据框

列表
R的列表是一个以对象的有序集合构成的对象。列表中包含的对象又称为分量,分量可以是不同的类型。
列表中分量会被编号,可以利用编号进行访问,例如list[2]代表列表中第2个元素,也可以使用$符号进行访问,可以使用c()函数将多个列表链接为一个大的列表:

> list1 <- list(name='chenyu',children=3,children.ages=c(4,7,9))
> list1[2]
$children
[1] 3

> list1$children.ages
[1] 4 7 9
> list2 <- list('xiaojin',age=20)
> 
> c(list1,list2)     #将两个列表连接为一个大列表
$name
[1] "chenyu"

$children
[1] 3

$children.ages
[1] 4 7 9

[[4]]
[1] "xiaojin"

$age
[1] 20

数据框
数据框data frame 是特殊的列表对象,是一个属于"data.frame"类的列表。满足数据框的列表条件:
①分量必须是向量(数值,字符,逻辑)、因子、数值矩阵、列表或其它数据框
②在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数

数据框的定义函数data.frame()完成,可以使用$符对数据框中元素进行访问。
此外,还可以使用attach()函数,将数据框的变量链接到内存中,可以直接引用某个分量或运算
使用detach()(无参数)即可取消链接。

> DF <- data.frame('value'=c(2.00,1.19,2.30,2.60,2.50),'class'=c('x','y','x','x','y'),'rank'=c(2,1,3,5,4))
> DF
  value class rank
1  2.00     x    2
2  1.19     y    1
3  2.30     x    3
4  2.60     x    5
5  2.50     y    4
> attach(DF)                  #对数据框的变量进行链接
> log(value)					#直接对其分量进行运算
[1] 0.6931472 0.1739533 0.8329091 0.9555114 0.9162907

数据框的分量名(此属性一定非空)由names()访问,rownames()可以定义各行的名字
当数据框、数组和列表在满足一定条件下,可以相互转换,函数为as.data.frame(), as.matrix(), as.array()分别把已有对象转换为数据框、矩阵和列表。

参考教程:《数据分析与R软件(第二版)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值