R语言:常用数据格式及其操作

R语⾔:常⽤数据格式及其操作
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填充。

本文发布于:2024-09-23 07:20:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/692948.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   合并   时间   函数   元素   向量   长度   不会
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议