1、 vector格式
vector是⼀维的数据集合,其数据必须为同⼀类型,例如都是int型,都是character型。⼀个原本全是数字组成的vector中⼀个元素替换为字母时,其余元素也会变为character型。 济南817
> a <- 1:6
> str(a)
int[1:6] 1 2 3 4 5 6
> a[1] <- 'a'
> str(a)
chr[1:6] "a" "2" "3" "4" "5""6"
查看vector中元素可以使⽤x[i]形式,值得注意的是当i超过向量长度时并不会报错,⽽是返回NA。
> a <- c('a', 'f', 1)
> str(a)
chr[1:3] "a" "f" "1"
> a[9]
[1] NA
同样,使⽤x[i]进⾏赋值时,若果i超过向量长度也不会报错,原向量会⾃动使⽤NA补⾜到i的长度。
> a <- c('a', 'f', 1)
> str(a)
chr[1:3] "a" "f" "1"
> a[9] <- 9
> str(a)
chr[1:9] "a" "f" "1" NA NA NA NA NA "9"
vector中的元素可以带题名,可⽤names函数查看或赋值。 > a <- c('a', 'f', 1)
> names(a)
NULL
> names(a) <- 1:3
> a
1 2 3
"a" "f" "1"
> names(a)
[1] "1" "2""3"
2、 matrix格式
matrix是⼆维的数据集合,可以看作vector向⼆维的拓展,也可以看作特殊的array,其数据也必须是同⼀类型。
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
dimnames = NULL)
参数:
data 表⽰新建矩阵中的数据
nrow ⾏数
ncol 列数
byrow 默认为FALSE,即表⽰⽣成矩阵时按列填充,若为TRUE则按⾏填充 dimnames ⾏列名,若⾮空,则须是长度为2的list,分别表⽰⾏名和列名
> matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, 2, 3, byrow = T)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> matrix(1:6, 2, 3, dimnames =list(c('A', 'b'), c('a', 'b', 'c')))
a bc
A 1 3 5
b 2 4 6
转置,使⽤函数t
> a <- matrix(1:6, 2, 3)
> a
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> t(a)
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
合并,函数rbind表⽰按⾏合并,cbind表⽰按列合并。
> a <- matrix(1:4, 2, 2)
> b <- matrix(5:8, 2, 2)
> rbind(a, b)
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 5 7
[4,] 6 8
> cbind(a, b)
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
3、 array格式
array可以看作是matrix向⾼维的拓展,其数据也必须是同⼀类型。
array(data = NA, dim = length(data), dimnames = NULL)
array的⽤法基本和matrix⼀致,只不过matrix中的ncol参数和nrow参数在这⾥变成了dim参数,dim参数须是⼀个表⽰维度的向量。
> array(1:8, c(2, 2, 2),
+ dimnames = list(c('A', 'B'),
+ c('a', 'b'),
+ c(1, 2)))
, , 1
a b
A 1 3
B 2 4
, , 2
a b
A 5 7
B 6 8
array的合并需要加载abind包,使⽤abind函数。激光对抗
abind(..., along=N, rev.along=NULL, new.names=NULL,force.array=TRUE,bind9
make.names=use.anon.names, use.anon.names=FALSE,
导线测量法 use.first.dimnames=FALSE, hier.names=FALSE, use.dnns=FALSE)
along 合并array时遵从的维度
rev.along 另⼀种确定合并维度的⽅式,along = N + 1 - rev.along
new.names 合并之后新的维度名
force.array 若为TRUE,则合并后的数据类型强⾏转化为array
> library(abind)
> a <- array(1:8, c(2, 2, 2))
> b <- array(9:16, c(2, 2, 2))
> abind(a, b, along = 1)
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 9 11
[4,] 10 12
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
[3,] 13 15
[4,] 14 16
4、 data.frame格式
data.frame是⼆维数据表,与matrix类似,但是不同列的数据可以属于不同的数据类型。
data.frame(...,row.names = NULL, ws = FALSE,
check.names = TRUE, pty.names= TRUE,
stringsAsFactors =default.stringsAsFactors())
参数stringsAsFactors若为TRUE,数据表中的character型数据会⾃动转化为factor型
⽣成⼀个data.frame数据表,可以先⽣成⼀个matrix,再使⽤data.frame或as.data.frame函数将其转化为data.frame格式,也可以使⽤data.frame函数将⼏个长度相等的vector组合成⼀个数据表。
> a <- c('a', 'b', 'c', 'd')
> b <- 1:4
> data.frame(a, b)
a b
1 a 1
2 b 2
3 c 3
4 d 4
> a <- matrix(NA, 2, 2)
> as.data.frame(a)
V1V2
1 NA NA
2 NA NA
data.frame的合并除了可以使⽤rbind和cbind函数,还可以使⽤merge函数。
merge(x, y, by =intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x= all, all.y = all,
sort = TRUE, suffixes =c(".x",".y"),
incomparables = NULL, ...)
其中by、by.x、by.y即⽤于合并的列名。
5、 list格式
list是⼀个⼴义的vector,但是其各元素可以是不同的数据结构。
⽣成⼀个长度为10的list,可以使⽤length函数
横断面x <- list(NA)
length(x) <- 10
x
6、 xts格式
xts是常⽤的时间序列数据格式。⼀个xts格式的数据由三部分组成,数据索引、数据主体、数据属性。数据索引即xts数据的时间/⽇期,类似“⾏名”,可以使⽤index函数将其提取出来;数据主体即数据的主要部分,类似⼀个data.frame;数据属性是⼈为添加的其他属性。 新建⼀个xts数据,可以使⽤xts函数。
xts(x = NULL,
order.by = index(x),
frequency = NULL,
unique = TRUE,
tzone = v("TZ"),
...)
order.by须是⼀个Date型数据。
> a
date open high close low volume total_paypdh
1 1991-04-03 988.05 988.05 988.05988.05 100 10000
2 1991-04-04 983.11 983.11 983.11983.11 52300 761000
3 1991-04-05 978.27 978.27 978.27978.27 10700 150000
4 1991-04-08 968.57 968.57 968.57968.57 5700 84000
5 1991-04-09 963.73 963.73 963.73963.73 1900 39000
6 1991-04-10 958.88 958.88 958.88958.88 4500 110000
> b <- xts(x = a[, 2:7], order.by =as.Date(a[, 1]))
> b
open high close low volume total_pay
1991-04-03 988.05 988.05 988.05 988.05 100 10000
1991-04-04 983.11 983.11 983.11 983.11 52300 761000
1991-04-05 978.27 978.27 978.27 978.27 10700 150000
1991-04-08 968.57 968.57 968.57 968.57 5700 84000
1991-04-09 963.73 963.73 963.73 963.73 1900 39000
1991-04-10 958.88 958.88 958.88 958.88 4500 110000
xts类型数据对于时间的检索⼗分⽅便,通过x[“相应⽇期”]的格式即可完成。
> b['1991-04-05']
open high close low volume total_pay
1991-04-05 978.27 978.27 978.27 978.27 10700 150000
某段时期内
> b['19910405/19910409']
open high close low volume total_pay
1991-04-05 978.27 978.27 978.27 978.27 10700 150000
1991-04-08 968.57 968.57 968.57 968.57 5700 84000
1991-04-09 963.73 963.73 963.73 963.73 1900 39000
> b['/19910405']
open high close low volume total_pay
1991-04-03 988.05 988.05 988.05 988.05 100 10000
1991-04-04 983.11 983.11 983.11 983.11 52300 761000
1991-04-05 978.27 978.27 978.27 978.27 10700 150000
xts数据集合并也可以使⽤cbind和rbind函数,若两个时间跨度不同的xts数据使⽤cbind合并,则会⽣成⼀个包含两个时间段所有时间的新序列,缺失值会⾃动⽤NA填充。