R语言基础语法

R语言数据结构包含:

向量(vector), 矩阵(matrix), 数组(array), 数据框(data frame), 列表(list). [索引从1开始]

基本向量类型

六种:逻辑型(logical),整数型(integer), 实数型(double),复数型(complex),字符型(string//character), 字节型(raw).可以通过typeof(),mode(),storage.mode()查看其向量的类型

只含有一个元素的向量是标量(标量只有大小没有方向,矢量既有大小又有方向)

cbind(),rbind()区别:

cbind:根据列进行合并,叠加所有列.[前提行数必须相同,cbind(a,b)] {column}

rbind:根据行进行合并,叠加所有行.[前提列数必须相同,rbind(a,b)] {row}

methods():

methods:查看其特定的类可以由哪些函数处理. eg:methods(class=lm)

identical():

判断向量是否相等,返回布尔值, identical(x,y).

which():

获取向量元素下标 which.max(),which.min(),which(a==3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1. # 新建数组 

2. a=c(1,3,4,5,3,2,5,6,3,2,5,6,7,5,8)

3.

4. # 取数组a中最大值的下标

5. which.max(a)

6.

7. # 取数组a中最小值的下标

8. which.min(a)

9.

10. # 取数组a中大于3值的下标

11. which(a>3)

12.

13. # 取数组a中等于3值的下标

14. which(a==3)

15.

16. # 10到1的数组元素中在a中的元素的下标

17. b <- which(10:1 %in% a)

18. b

19. [1] 3 4 5 6 7 8 9 10

c函数:

c函数:用于合并一系列数字从而形成向量,数列[英文全拼:concatenate(把’’’连接在一起)]

names():

给向量的元素命名,eg:names(score)<-c(“A”,”B”,”C”,”D”)

向量

  • seq创建向量: seq(begin=1,end=3,by=2) #间隔等于2

矩阵

  • 矩阵生成: matrix(data= NA,nrow=1,ncol=1,byrow=FALSE,dimnames =NULL); [byrow是否按行填充矩阵,dimnames维度名称] x<-matrix(c(1:12),nrow=3,ncol=4,byrow=TRUE)
  • t(): 矩阵转置.

  • 选取:
    • 选取单个元素: x[2,4]

    • 选取一行元素:x[2,]

    • 选取多行多列元素:x[c(2,4),c(2,3)]

    • 剔除矩阵的某行/某列元素: x[-1] #剔除第一行元素,同样适用于向量 x[-1,-2] #剔除第一行第二列的元素

  • 行列命名:

    rownames(matrix) #查看矩阵行名称
    colnames(matrix) #查看矩阵列名称
    rownames<-c(LETTERS[1:5]) #A-E为行命名
    还可以通过行列名称选取相应值: x[‘A’,’B’];

  • dim()返回各个维度的最大值.
    数据框: data.frame()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    observation<-c(1:6)
    birthday<-c("1/2","3/2","6/2","8/2","9/5","8/7")
    gender<-c('M','M','F','F','F','M')
    weight<-c(8.6,3.2,4.6,3.1,5.6,42.2)
    height<-c(78,32,31,51,53,31)
    bloodtype<-c('A','B','C','AB','O','A')
    breastmilk<-c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
    bady<-data.frame(observation,birthday,gender,weight,height,height,bloodtype,breastmilk)
    bady #
  • 访问数据框中的特定变量:例如选取生日和身高的数据: bady[,c(2,5)] 或者通过变量名称获取:bady[c(‘birthday’,’height’)] ||bady[c(2,5),]
  • bady$observation: $ 选择结果转换为向量式,从而可以绘图或计算

    • summary(bady$height) #计算

    • plot(bady$observation,bady$height,type=’h’,lwd=5,xlab=’observation’,ylab=’height(cm)’,ylim= c(60,75),main=’身高数据’) #绘图

    • 使用$比较繁琐,也可以使用

      attach()#添加数据框到R语言的查询路径
      1
      2
      3
      4
      5
      6

      detach() #解除添加

      两个函数要成对出现` .


因子(factor)
  • 因子是R语言中较重要的向量对象(类别变量),eg: Grade:A,B,C,D,E,F

factor(x=character(),levels(),labels=levels,exclude=NA,ordered = is.ordered(x),nmax=NA) # x:向量,levels: 指定因子的水平值,ordered: 是否对因子的水平值进行排序,nmax: 水平值的上界,labels为levels添加标签,未包含于levels中需剔除的值

factors默认按字母顺序对应水平顺序

列表 list
列表是一种复杂的数据结构,可以包含不同类型的元素(向量,矩阵,数组,数据框,其他类型的列表).是由一些对象的有序结合构成的对象,每个对象成为列表的分量(components),它们的长度和类型可以不相同.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
> student<-c("John","Peter")
> subject<-c("Math","Reading","History","Physics","Economics")
> listOne<-list(subject,student)
> listOne
[[1]]
[1] "Math" "Reading" "History" "Physics" "Economics"

[[2]]
[1] "John" "Peter"

> listOne<-list(subjectNames=subject,studentNames=student) #分别对两个对象进行命名
> listOne
$subjectNames
[1] "Math" "Reading" "History" "Physics" "Economics"

$studentNames
[1] "John" "Peter"

> score<-matrix(c(95,80,60,72,84,58,32,65,43,49),nrow = 5,ncol = 2,dimnames = listOne) #列表对维度命名
> score
studentNames
subjectNames John Peter
Math 95 58
Reading 80 32
History 60 65
Physics 72 43
Economics 84 49
> x<-data.frame(score,gradeJohn=factor(c("A","B","D","C","B")),gradePeter=factor(c("B","D","D","D","D")))
> listTwo<-list(title="The Exam Results",listOne,x)
> listTwo
$title
[1] "The Exam Results"

[[2]]
[[2]]$subjectNames
[1] "Math" "Reading" "History" "Physics" "Economics"

[[2]]$studentNames
[1] "John" "Peter"


[[3]]
John Peter gradeJohn gradePeter
Math 95 58 A B
Reading 80 32 B D
History 60 65 D D
Physics 72 43 C D
Economics 84 49 B D

> listTwo[[2]]
$subjectNames
[1] "Math" "Reading" "History" "Physics" "Economics"

$studentNames
[1] "John" "Peter"

> listTwo[[2]]$subjectNames
[1] "Math" "Reading" "History" "Physics" "Economics"
> listTwo$subjectNames
NULL
时间序列
时间序列是特殊的矩阵或向量,由函数ts()创建,一元时间序列默认值 ts,多元时间序列默认值c(“mts”,”ts”) ,

ts(data=NA,start=1,end=numeric(),frequency=1,deltat=1,ts.eps=getOption("ts.eps"),class= ,names=)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
> ts1<-ts(1:10,2010,frequency=1)
> ts1
Time Series:
Start = 2010
End = 2019
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10
> ts2<-ts(1:36,frequency=12,start=c(2010,3))
> ts2
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2010 1 2 3 4 5 6 7 8 9 10
2011 11 12 13 14 15 16 17 18 19 20 21 22
2012 23 24 25 26 27 28 29 30 31 32 33 34
2013 35 36
> ts3<-ts(matrix(rnorm(24),8,3),start=c(2010,1),frequency = 4) #rnorm生成随机数
> ts3
Series 1 Series 2 Series 3
2010 Q1 -2.53265150 0.06600203 -0.9506540
2010 Q2 0.05894453 -0.84349820 -0.1765523
2010 Q3 -0.47160257 -1.52484881 0.3253143
2010 Q4 -0.68957525 0.12292570 0.4269442
2011 Q1 -2.47980475 0.59243573 -1.7735254
2011 Q2 -2.28164139 1.02340819 -0.7188506
2011 Q3 -1.14978250 -0.36354444 0.8143795
2011 Q4 0.20981269 0.37868089 -1.4009437
> ts3<-ts(matrix(rnorm(24),8,3),start=c(2010,1),frequency = 4,names=c("A","B","C"))
> ts3
A B C
2010 Q1 -0.734254773 0.03228792 -0.839969064
2010 Q2 0.190277060 -0.37829225 0.896352619
2010 Q3 0.007298513 0.10820272 -0.140795278
2010 Q4 0.376817757 -1.10836939 -0.429474769
2011 Q1 -1.099760283 0.64250578 0.003784024
2011 Q2 -0.563540402 -0.69517193 -1.073160625
2011 Q3 -0.899862468 -0.23836692 -0.866785660
2011 Q4 -0.668345051 -0.49486593 0.167862363
数据载入
  • 从外部获取数据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    read.csv()
    read.csv(file,header=TRUE,sep=",",quote="\",dec=".",fill=TRUE,comment.char="",...)
    #header首行是否为字段名,默认为TRUE,
    #sep字段的分隔符,默认为逗号
    #quote指定字段的分隔符
    #dec指定表示小数点的字符
    #fill文件中是否忽略了行尾的字段
    #comment.char表示注释符,默认为#,如果文件中没有注释,采用默认的 comment.char="" 即可
    read.table()
    扩展包gdata中的read.xls()函数
    扩展包RODBC中的相关函数
    扩展包foreign中的相关函数
    数据输出
数据管理
  • 访问数据
    1
    2
    3
    > x<-seq(1,100,2)  #访问向量元素
    > x[10]
    [1] 19
字符串的处理
1
2
3
4
5
6
7
8
- 字符串连接: paste()函数,paste(...,sep='',collapse=NULL)
(1) ...表示一个或多个R对象,paste()函数将对象首先处理成字符串,然后再相互组合
(2)sep表示用于连接字符的自定义分隔符,例如空格、$、等等,默认为空格
(3)collapse参数为可选项,指定collapse参数时,会按照该参数值在之前组合的字符串基础上,再通过collapse参数进行分割,形成单独的长字符串,而非向量。
eg:
> x<-paste(LETTERS[1:6],letters[1:6],sep="#",collapse = "&")
> x
[1] "A#a&B#b&C#c&D#d&E#e&F#f"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- 字符串拆分 strsplit(x,spilt,fixed=FALSE,perl=FALSE,useBytes=FALSE)
(1)x:字符串向量,strspilt()函数依次对向量中每个元素进行拆分。
(2)spilt:指定处在拆分位置上的字符串,即在那个字符串处进行拆分,
(3)fixed:用普通文本匹配还是用正则表达式进行匹配。默认正则匹配
(4)perl:表示使用perl语言的正则表达式,默认FALSE
(5)useBytes:表示是否按字节进行匹配,默认为FALSE,表示按照字符而不是字节进行匹配。
strsplit()函数返回列表,unlist()函数将列表转换为字符串向量
eg:
> year<-c("1990-1995","1996-2000","2001-2005")
> splityear<-strsplit(year,split="-")
> splityear
[[1]]
[1] "1990" "1995"

[[2]]
[1] "1996" "2000"

[[3]]
[1] "2001" "2005"

> unlist(splityear)
[1] "1990" "1995" "1996" "2000" "2001" "2005"
>

1
2
3
4
5
6
7
8
boxplot绘制箱线图
boxplot(x, ..., range = 1.5, width = NULL, varwidth = FALSE,
notch = FALSE, outline = TRUE, names, plot = TRUE,
border = par("fg"), col = NULL, log = "", pars = list(boxwex
= 0.8, staplewex = 0.5, outwex = 0.5), horizontal = FALSE,
add = FALSE, at = NULL)
#参数x为要绘制的数据,range控制点线延伸的长度,默认值为上下四分位数只差的1.5倍,在触须延伸终点
#绘制横截线,outline表示是否绘制异常值,horizontal控制是否以水平或垂直于坐标轴的方式绘制箱线图
1
2
四分位数:
异常值计算方法:大于上四分位数的1.5倍分散度的值,或小于下四分位数1.5倍分散度的值,对于1.5至3倍分散度的异常值,用空心圆点表示,对于超出分散度三倍的异常值作为极端异常值处理,用实心圆点表示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
散点图:plot()函数绘制分组数据的散点图
饼图:pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
density = NULL, angle = 45, col = NULL, border = NULL, lty =
NULL, main = NULL, ...)
1)x为向量,其元素为非负的数值型数据,这些数据反映在
饼图的对应面积上。
2)labels是表达式或者字符串,用以给数据添加标签。
3)edges用来控制饼图外圈的圆润程度。饼图是由多边形拟合
而成的,edges数值越大,饼图的外圈看上去就越圆。
4)radius用来控制饼图的半径,如果给数据添加的标签很长,
缩小饼图半径就能够将字符完整显示出来。
5)clockwise用来控制排列顺序,即顺时针或逆时针方向排列。
6)density用来控制阴影线的密度。
7)angle用以控制阴影线的斜率。
8)col是一个向量,用以填充被分割饼图的每一区域的颜色。
9)main控制图的标题。
eg:pie(c(10,20,30,40),col=rainbow(4),labels=c("10%","20%","30%","40%"),main="PIE CHART")

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
柱状图:barplot(height, width = 1, space = NULL, names.arg =
NULL, legend.text = NULL, beside = FALSE, horiz = FALSE,
density = NULL, angle = 45, col = NULL, border = par("fg"),
main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim
= NULL, ylim = NULL, xpd = TRUE, log = "", axes = TRUE,
axisnames = TRUE, cex.axis = par("cex.axis"), cex.names =
par("cex.axis"), inside = TRUE, plot = TRUE, axis.lty = 0,
offset = 0, add = FALSE, args.legend = NULL, ...)
(1)height是绘图所用到的数据,数据的大小差异体现在柱
形的高度上面。如果想要对一组数据进行绘图,则数据以向量
方式输入;如果想要对两组以上数据进行绘图,则数据以矩阵
方式输入,矩阵每一行代表一组数据。
(2)names.arg是图形中绘制于每个柱形下方的名称向量。如
果该参数被忽略,则名称就显示为向量所带的名称属性或矩阵
的名称列。
(3)legend.text用以控制图例。
(4)horiz控制柱形(条形)以垂直或水平方式放置。
(5)beside控制不同组数据以垂直方式堆积或水平方式并列
来进行展示。取FALSE(默认取值)时,不同组的数据以垂直方
式堆积展示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
直方图:hist(x, breaks = "Sturges", freq = NULL, probability = !freq,
include.lowest = TRUE, right = TRUE, density = NULL,
angle = 45, col = NULL, border = NULL, main =
paste("Histogram of", xname), xlim = range(breaks), ylim
= NULL, xlab = xname, ylab, axes = TRUE, plot = TRUE,
labels = FALSE, nclass = NULL, warn.unused = TRUE, ...)
(1)x是数值型向量,即所需要绘制直方图的数据集。
(2)breaks参数通过以下方式控制直方图的单元(cells)数
量:
a) 给出一个向量,从而确定直方图单元的区间断点(breakpoints);
b) 给出单个数值,从而确定直方图的单元数量;
c) 给出计算区间的算法名称的字符串;
d) 一个用于计算单元数量的函数。
(3)freq和probability均为逻辑判断式,且两者为互斥选项,
freq=TRUE时做频率图,否则为概率密度图。当probability=TRUE
时,所有矩形的面积之和为1。
(4)labels是逻辑值,当labels=TRUE时,将添加相应的数值
到矩形单元的上方。
(5)density参数设置填充矩形条的阴影线(shading lines)
的密度,度量单位是每英寸填充的线条数。缺省模式下不绘制
阴影线。angle参数设定了阴影线的角度。
(6)col参数设定了填充矩形条内部的颜色,当density为正
数时,阴影线的颜色由col指定。
(7)border参数设置矩形条边框的颜色,当border=FALSE或
NA时,将不绘制边框。
(8)如果想要自己设定坐标,可以使用xaxt="n"或yaxt="n"
不绘制坐标,然后使用低级绘图命令axis来自定义坐标。

时间序列建模步骤:

image-20201124174607950

目前, 最常用的平稳序列拟合模型是自回归模型 (AR 模 型)、移动平均模型 (MA 模型) 和自回归移动平均模型 (ARMA 模型). 这三类模型都属于有限参数线性模型,

arima.sim拟合函数:image-20201125090745445

image-20201125120138778

image-20201125120221668


:D 一言句子获取中...