数据阐明与R语言条记1:R与R语言
一、关于R
1. R的源起
R是S语言的一种实现。S语言是由 AT&T贝尔尝试室开拓的一种用来举办数据摸索、统计阐明、作图的表明型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个贸易 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。厥后Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开拓了一个R系统。R的利用与S-PLUS有许多雷同之处,两个软件有必然的兼容性。
2. R is free
R是用于统计阐明、画图的语言和操尽兴况。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计较和统计制图的优秀东西。
R是一套完整的数据处理惩罚、计较和制图软件系统。其成果包罗:数据存储和处理惩罚系统;数组运算东西(其向量、矩阵运算方面成果尤其强大);完整连贯的统计阐明东西;优秀的统计制图成果;轻便而强大的编程语言:可哄骗数据的输入和输入,可实现分支、轮回,用户可自界说成果。
R是一个免费的自由软件,它有UNIX、Linux、MacOS和WINDOWS版本,都是可以免费下载和利用的,在那儿可以下载到R的安装措施、各类外挂措施和文档。在R的安装措施中只包括了8个基本模块,其他外在模块可以通过CRAN得到。
3. R的特点
(1) 有效的数据处理惩罚和生存机制。
(2) 拥有一整套数组和矩阵的操纵运算符。
(3) 一系列连贯而又完整的数据阐明中间东西。
(4) 图形统计可以对数据直接举办阐明和显示,可用于多种图形设备。
(5) 一种相当完善、简捷和高效的措施设计语言。它包罗条件语句、轮回语句、用户自界说的递归函数以及输入输出接口。
(6) R语言是彻底面向工具的统计编程语言。
(7) R语言和其它编程语言、数据库之间有很好的接口。
(8) R语言是自由软件,可以安心斗胆地利用,但其成果却不比任何其它同类软件差。
(9) R语言具有富厚的网上资源
二、R语言
1、建设向量和矩阵
函数
c():建设向量,R中数据是靠向量组织起来的;
length():查询向量的长度,即向量内项的个数;
mode():查察向量的范例;
rbind():将向量按行合成矩阵;
cbind():将向量按行合成矩阵。
> x=c(1,3,5,6,9,10) > x [1] 1 3 5 6 9 10 > mode(x) [1] "numeric" > y=c("a","b","sealter") > y [1] "a" "b" "sealter" > mode(y) [1] "character" > x1=c(2,4,5,6) > x1 [1] 2 4 5 6 > x2=c(7,6,8,9) > x2 [1] 7 6 8 9 > length(x1) [1] 4 > mode(x2) [1] "numeric" > x3=c(1:100) > length(x3) [1] 100 > x3 [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 91 92 93 94 95 96 97 98 99 100 > x3[4] [1] 4 > rbind(x1,x2) [,1] [,2] [,3] [,4] x1 2 4 5 6 x2 7 6 8 9 > cbind(x1,x2) x1 x2 [1,] 2 7 [2,] 4 6 [3,] 5 8 [4,] 6 9 >
2、求平均值、和、连乘、最值、方差和尺度差
函数:
mean():平均值
sum(): 和
min(): 最小值
max(): 较大值
var(): 方差
sd(): 尺度差
prod(): 连乘
> x=c(1:100) > mean(x) [1] 50.5 > sum(x) [1] 5050 > min(x) [1] 1 > max(x) [1] 100 > var(X) 错误于is.data.frame(x) : 找不到工具'X' > var(x) [1] 841.6667 > sd(x) [1] 29.01149 > prod(x) [1] 9.332622e+157 >
3、寻求辅佐
函数
help()
> help(mode) starting httpd help server ... done >
4、发生向量
(1) a是向量:
a[5]:只显示向量a第5个元素;
a[-5]:显示除第5个元素之外a的所有元素;
a[1:5]:显示向量a第1-5个元素;
a[-(1:5)]:显示除1-5个元素外向量a的所有元素;
a[c(2,4,7)]:显示向量a第2、4、7个元素;
a[a<20]:将向量a中小于20的元素都列出来
a[a>30 & a<50]
a[a[3]]
> 1:10 [1] 1 2 3 4 5 6 7 8 9 10 > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 2:60*2+1 [1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 [19] 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 [37] 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 [55] 113 115 117 119 121 > a=2:60*2+1 > a [1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 [19] 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 [37] 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 [55] 113 115 117 119 121 > a[5] [1] 13 > a[-5] [1] 5 7 9 11 15 17 19 21 23 25 27 29 31 33 35 37 39 41 [19] 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 [37] 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 [55] 115 117 119 121 > a[1:5] [1] 5 7 9 11 13 > a[-(1:5)] [1] 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 [19] 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 [37] 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 > a[c(2,4,7)] [1] 7 11 17 > a[a<20] [1] 5 7 9 11 13 15 17 19 > a[a>30 & a<50] [1] 31 33 35 37 39 41 43 45 47 49 > a[a[3]] [1] 21 >
(2) seq()函数
按指定纪律发生向量
#p#分页标题#e#
seq(5,20):5-20,公差为1;
seq(5,121,by=2): 5-121,公差为2;
seq(5,121,length=10):首项是5,末项是121,总共有10个项,公差自动计较。
> seq(5,20) [1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > seq(5,121,by=2) [1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 [19] 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 [37] 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 [55] 113 115 117 119 121 > seq(5,121,length=10) [1] 5.00000 17.88889 30.77778 43.66667 56.55556 69.44444 82.33333 [8] 95.22222 108.11111 121.00000 >
(3) 发生字母序列letters
letters[1:30]
> letters[1:30] [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" [19] "s" "t" "u" "v" "w" "x" "y" "z" NA NA NA NA >
5、新建向量
(1) which()函数
which.max(a):较大值的项的下标;
which.min(a): 最小值的项的下标;
a[which.max(a)]:较大值;
a[which.min(a)]:最小值;
which(a==2):向量的项为2的下标;
a[which(a==2)]:向量项为2的值;
which(a>5):
a[which(a>5)]:
> a=c(2,3,4,2,5,1,6,3,2,5,8,5,7,3) > which.max(a) [1] 11 > which.min(a) [1] 6 > a[which.max(a)] [1] 8 > a[which.min(a)] [1] 1 > which(a==2) [1] 1 4 9 > a[which(a==2)] [1] 2 2 2 > which(a>5) [1] 7 11 13 > a[which(a>5)] [1] 6 8 7 >
(2) 函数:
rev(): 倒置函数
sort(): 排序函数,从小到大顺序
> a=1:20 > a [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > rev(a) [1] 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 > a=c(2,3,4,2,6,5,1,3,1,7,9,4,5) > a [1] 2 3 4 2 6 5 1 3 1 7 9 4 5 > sort(a) [1] 1 1 2 2 3 3 4 4 5 5 6 7 9 > rev(sort(a)) [1] 9 7 6 5 5 4 4 3 3 2 2 1 1 >
6、生成矩阵
函数matrix()
> a=c(1:12) > a [1] 1 2 3 4 5 6 7 8 9 10 11 12 > matrix(a,nrow=3,ncol=4) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > matrix(a,nrow=4,ncol=3) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 > matrix(a,nrow=3,ncol=4,byrow=T) [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 >
7、矩阵运算
(1) 矩阵转置:
函数t(): 行变列,列变行
(2) 矩阵加减:
要具有沟通的行数和列数。对应元素向加减
(3) 矩阵相乘:
a%*%b(a*b是对应元素相乘,而非矩阵乘法)
(4) 求对角线
函数diag():
diag(a):
diag(diag(a)):对角线矩阵
diag(4):4阶单元矩阵
(5) 矩阵求逆
函数 rnorm(): 按正态漫衍发生随机数。如rnorm(16),按正态漫衍发生16个随机数
solve(): 求矩阵的逆矩阵
(6) 解线性方程组
函数 solve(a,b)
(7) 矩阵的特征值和特征向量
函数 eigen()
> a=matrix(1:12,nrow=3,ncol=4) > a [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > t(a) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12 > a=b=matrix(1:12,nrow=3,ncol=4) > a+b [,1] [,2] [,3] [,4] [1,] 2 8 14 20 [2,] 4 10 16 22 [3,] 6 12 18 24 > a-b [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0 > a=matrix(1:12,nrow=3,ncol=4) > a [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > b=matrix(1:12,nrow=4,ncol=3) > b [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 > a%*%b [,1] [,2] [,3] [1,] 70 158 246 [2,] 80 184 288 [3,] 90 210 330 > > > a=matrix(1:12,nrow=4,ncol=4) > a [,1] [,2] [,3] [,4] [1,] 1 5 9 1 [2,] 2 6 10 2 [3,] 3 7 11 3 [4,] 4 8 12 4 > diag(a) [1] 1 6 11 4 > diag(diag(a)) [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 6 0 0 [3,] 0 0 11 0 [4,] 0 0 0 4 > diag(4) [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 1 0 0 [3,] 0 0 1 0 [4,] 0 0 0 1 > > > a=matrix(rnorm(16),4,4) > a [,1] [,2] [,3] [,4] [1,] -0.07449835 0.767041272 0.01604615 0.3095899 [2,] -0.73162169 0.001057113 -0.59228669 -1.7638285 [3,] -0.05484903 0.371784466 -0.89071220 -1.1877961 [4,] -1.33939256 0.984520795 -0.89137273 0.1809239 > solve(a) [,1] [,2] [,3] [,4] [1,] 0.1762998 -0.6002995 0.86669528 -0.4640008 [2,] 1.4974565 0.1813369 0.09267046 -0.1861373 [3,] 1.2866720 0.9715747 -1.19169171 -0.5534725 [4,] -0.5042897 -0.6440915 0.04072280 0.3782061 > > > a=matrix(rnorm(16),4,4) > a [,1] [,2] [,3] [,4] [1,] -0.63144227 -0.4368828 -0.9003846 -0.6729192 [2,] 2.58904440 -0.2548481 -1.0429883 -0.1636670 [3,] -0.00467959 -0.2999544 0.9018346 -1.7540551 [4,] 2.01625048 -0.4873416 -0.5567995 -0.1960334 > b=c(1:4) > b [1] 1 2 3 4 > solve(a,b) [1] 0.7324562 -7.1253633 1.5908142 0.3241105 > > > a=diag(4)+1 > a [,1] [,2] [,3] [,4] [1,] 2 1 1 1 [2,] 1 2 1 1 [3,] 1 1 2 1 [4,] 1 1 1 2 > a.e=eigen(a,symmetric=T) > a.e $values [1] 5 1 1 1 $vectors [,1] [,2] [,3] [,4] [1,] -0.5 0.8660254 0.0000000 0.0000000 [2,] -0.5 -0.2886751 -0.5773503 -0.5773503 [3,] -0.5 -0.2886751 -0.2113249 0.7886751 [4,] -0.5 -0.2886751 0.7886751 -0.2113249
三、数据的R语言暗示——数据框
1、向量、数组与矩阵
函数dim()
2、数据框
矩阵形式,但列可以差异数据范例
每列是一个变量,每行是一个视察值
函数 data.frame()。如data.frame(x1,x2),向量x1和x2的长度要相等
3、画散点图
#p#分页标题#e#
函数plot()
> x=c(1:6) > x [1] 1 2 3 4 5 6 > is.vector(x) [1] TRUE > is.array(x) [1] FALSE > dim(x)<-c(2,3) > x [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > is.array(x) [1] TRUE > is.matrix(x) [1] TRUE > > > x1=c(10,13,45,26,23,12,24,78,23,43,31,56) > x2=c(20,65,32,32,27,87,60,13,42,51,77,35) > x=data.frame(x1,x2) > x x1 x2 1 10 20 2 13 65 3 45 32 4 26 32 5 23 27 6 12 87 7 24 60 8 78 13 9 23 42 10 43 51 11 31 77 12 56 35 > x=data.frame('重量'=x1,'运费'=x2) > x 重量 运费 1 10 20 2 13 65 3 45 32 4 26 32 5 23 27 6 12 87 7 24 60 8 78 13 9 23 42 10 43 51 11 31 77 12 56 35 > plot(x) >
4、读文本文件数据
先配置事情目次,把文本文件放于该目次下
x=read.table(“abc.txt”)
5、读剪切板
文本或Excel的数据均可通过剪贴板操纵
y <- read.table(“clipboard”,header=T)
6、读Excel文件数据
要领1:先把excel另存为空格脱离的prn文本名目再读
w <- read.table(“test.prn”,header=T)
要领2:安装RODBC包,再通过ODBC读
四、轮回语句与R剧本
1、轮回语句
(1) for 语句
(2) while 语句
2、R剧本
函数:
source(),
print()