R语言基础知识学习(二):R中的矩阵,数据框,列表和时间序列
一、矩阵(matrix)
R中的矩阵是带有维度(dim)的向量,可用matrix()函数来输入,具体如下:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
byrow:按行排列,默认是false,即默认是按列排列的。
例如:
> matrix(1:6,2,3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:8,2,4,TRUE)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
另一种构造矩阵的方法是给向量加一个维度值,如:
> x <- 1:15
> x
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> dim(x)
NULL
默认向量的维度是null.
> dim(x) <- c(3,5)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
二、数据框(Data Frame)
数据框可用函数data.frame()来创建,具体如下:
data.frame(..., row.names = NULL, check.rows = FALSE,check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())
> x <- 1:12
> y <- 3:14
> f1 <- data.frame(x,y)
> f1
x y
1 1 3
2 2 4
3 3 5
4 4 6
5 5 7
6 6 8
7 7 9
8 8 10
9 9 11
10 10 12
11 11 13
12 12 14
> z <- c(1,2,3,4)
> f2 <- data.frame(x,z)
> f2
x z
1 1 1
2 2 2
3 3 3
4 4 4
5 5 1
6 6 2
7 7 3
8 8 4
9 9 1
10 10 2
11 11 3
12 12 4
数据框的两个向量必须具有相同的长度,如果其中一个比较短,它将循环之。
数据框的列名可以改变,如:
> m <- 1:5
> n <- 6:10
> data.frame(A=m,B=n)
A B
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
也可以用row.names()函数给行命名,如:
>f1<- data.frame(A=m,B=n)
> row.names(f1) <- c('a1','a2','a3','a4','a5')
> f1
A B
a1 1 6
a2 2 7
a3 3 8
a4 4 9
a5 5 10
dim()函数给出了数据框的维度
> dim(f1)
[1] 5 2
三、列表(list)
列表可用函数list()来创建,它度其中包含的对象没什么限制。如:
> x <- 1:4
> y <- 2:4
> z <- 4:5
> l1 <- list(x,y)
> l1
[[1]]
[1] 1 2 3 4
[[2]]
[1] 2 3 4
> l2 <- list(A=x,B=z)
> l2
$A
[1] 1 2 3 4
$B
[1] 4 5
> w <- c('China','Japan','America')
> list(x,w)
[[1]]
[1] 1 2 3 4
[[2]]
[1] "China" "Japan" "America"
四、时间序列(time-series)
函数ts()可以由向量(一元时间序列)或者矩阵(多元时间序列)创建一个ts型对象,并且有一些表明序列特征的选项(带有缺省值)
ts(data = NA, start = 1, end = numeric(), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )
> ts(matrix(rpois(36,5),12,3),start = c(1965,2),frequency = 12)
Series 1 Series 2 Series 3
Feb 1965 6 5 7
Mar 1965 8 6 7
Apr 1965 7 5 5
May 1965 7 6 7
Jun 1965 7 4 4
Jul 1965 4 8 4
Aug 1965 2 4 6
Sep 1965 10 8 5
Oct 1965 6 6 2
Nov 1965 9 3 8
Dec 1965 7 7 10
Jan 1966 7 9 3
> ts(matrix(rpois(36,5),12,3),start = c(1965,2),frequency = 4)
Series 1 Series 2 Series 3
1965 Q2 8 7 3
1965 Q3 2 6 6
1965 Q4 5 4 10
1966 Q1 3 4 4
1966 Q2 3 4 5
1966 Q3 8 1 7
1966 Q4 5 6 3
1967 Q1 4 7 8
1967 Q2 7 6 4
1967 Q3 2 2 2
1967 Q4 8 9 5
1968 Q1 6 8 4