R语言-数据对象与运算
数据对象与类型的R语言表示
1.mode()函数:输出数据类型;length()函数:输出数据长度
2.可以用指数形式表示数据,如:2e+10,2e-10
3.Inf:表示正无穷;-Inf:表示负无穷;NAN:表示不是数的值
4.加双引号表示字符型数据;\“”:表示引用双引号
5.数据对象类型:
向量:数值,字符,复数,逻辑
因子:数值,字符
数组:数值,字符,复数,逻辑
矩阵:数值,字符,复数,逻辑
数据框:数值,字符,复数,逻辑
时间序列:数值,字符,复数,逻辑
列表:数值,字符,复数,逻辑,函数,表达式
数据对象构造
- 向量的构造
向量:由相同基本类型元素组成的序列
向量的赋值:
1.1函数c()赋值
x=c(1,3,5,7)
1.2函数assign()赋值
assign("y",c(1,3,5,7))
1.3用“:”可以产生步长为1的序列
z=1:5
1.4函数seq(from,to,by):产生有规律的各种序列,by表示步长
seq(10,1,-1)
1.5函数rep(x,times)
rep(c(1,3),3)
表示将数组(1,3)重复三次
输出结果:
[1] 1 3 1 3 1 3
- 矩阵的构造
矩阵(二维数组):用行和列排列的长方形数据表格,通常行表示不同的对象,列表示不同的变量。
函数matrix():构造矩阵
matrix(data=NA,nrow=1,ncol=1,byrow=False,dimnames=NULL)
其中,data为向量数据,nrow为行数,ncol为列数,byrow默认为false,表示生成矩阵的数据按列放置,dimname默认为空,表示矩阵行和列的名字。
matrix(c(1,3,5,7,9,11,13,15),4,2)
输出结果:
[,1] [,2]
[1,] 1 9
[2,] 3 11
[3,] 5 13
[4,] 7 15
3.数组的构造
数组:带有多个下标、类型相同元素的集合。
函数array():构造数组
array(x=NA,dim=length(data),dimnames=NULL)
array(1:20,c(2,2,5))
输出结果:
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
, , 3
[,1] [,2]
[1,] 9 11
[2,] 10 12
, , 4
[,1] [,2]
[1,] 13 15
[2,] 14 16
, , 5
[,1] [,2]
[1,] 17 19
[2,] 18 20
4.列表的构造
列表:是特殊的对象集合,列表中包含的对象又叫做成分,成分可以是不同的类型。
list(变量1=分量1,变量2=分量2,…)
list(name="Fred",wife="Mary",no.childern=3,child.ages=c(4,7,9))
输出结果:
$name
[1] "Fred"
$wife
[1] "Mary"
$no.childern
[1] 3
$child.ages
[1] 4 7 9
5.数据框的构造
数据框:矩阵形式的数据,各列可以是不同类型的数据。即可以看作是一种矩阵的推广,又可以看作是特殊的列表。
data.frame(data1,data2,…)
data.frame(name=c("Alice","Becka","James","Jeffrey","John"),sex=c("F","F","M","M","M"),age=c(13,13,12,13,12),height=c(56.5,65.3,57.3,62.5,59),weight=c(84,98,83,84,99.5))
输出结果:
name sex age height weight
1 Alice F 13 56.5 84.0
2 Becka F 13 65.3 98.0
3 James M 12 57.3 83.0
4 Jeffrey M 13 62.5 84.0
5 John M 12 59.0 99.5
6.时间序列的构造
时间序列:可使用函数ts()由向量(一元时间序列)或者矩阵(多元时间序列)创建一个时间序列对象。
ts(data=NA,start=1,end=numeric(0),frequency=1,deltat=1,ts.eps=getoption(“ts.eps”),class,names),其中data为向量或矩阵;start为第一个观测值的时间,可以为一个数或者两个数构成的向量;end为最后一个观察值的时间,指定方法与start相同;frequency为单位时间内观察值的频率(频数);deltat为两个观察值之间的时间间隔(frequency和deltat必须并且只能指定其中一个);ts.eps为序列间的误差限;class为对象的类型;names为字符型向量,给出多元序列中每个一元序列的名称,若缺省则为data中每列数据名称或者series1,series2,…)
ts(matrix(rpois(36,5),12,3),start=c(1961,1),frequency=12)
输出结果为:
Series 1 Series 2 Series 3
Jan 1961 8 5 7
Feb 1961 6 1 2
Mar 1961 4 8 3
Apr 1961 6 7 8
May 1961 3 6 8
Jun 1961 5 3 7
Jul 1961 1 8 4
Aug 1961 6 5 4
Sep 1961 4 3 5
Oct 1961 8 8 2
Nov 1961 3 5 7
Dec 1961 8 5 6
7.因子与有序因子
分类数据是把数据分成不同的水平或因子。
- facter(x,levels=sort(unique(x),na.last=TRUE),labels,exclude=NA,ordered=FALSE)把一个向量编码成一个因子。
sex=c("f","m","f","f","m"); factor(sex)
输出结果:
[1] f m f f m
Levels: f m
- gl(n,k,length=n*k,labels=1:n,ordered=FALSE)产生因子。n表示水平数,k表示每个水平重复的次数,lenghth表示结果的长度,labels是一个n维向量,表示因子水平,ordered表示是否为有序因子。
> gl(3,5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(3,1,9)
[1] 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
- expand.grid()创建一个数据框,实现把各参数的各水平完全搭配。
> expand.grid(h=c(60,80),w=c(100,300),sex=c("Male","Female"))
h w sex
1 60 100 Male
2 80 100 Male
3 60 300 Male
4 80 300 Male
5 60 100 Female
6 80 100 Female
7 60 300 Female
8 80 300 Female
- ordered()生成有序因子
> ordered(c("B","C","D","B","A","D","A"),levels=c("D","C","B","A"))
[1] B C D B A D A
Levels: D < C < B < A