R语言
一、数组
> x=c(1:6)
> x
[1] 1 2 3 4 5 6
> is.vector(x) #判断x是一个向量
[1] TRUE
> is.array(x) #判断x不是一个数组
[1] FALSE
> dim(x) <-c(2,3) #使用dim (x)赋值一个(2,3)数组
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> is.array(x) #再次判断x是否是数组
[1] TRUE
> is.matrix(x) #判断x是否是矩阵(注意:矩阵是数组的特殊情况)
[1] TRUE
二、数据框
数据框和矩阵的区别是:数据框是有字符和数字组成的,而矩阵全是数字组成的。
在统计学了,数据框更能体现它的样子。
在这里可以数据组成一个数据框使用data.frame(x1,x2)函数来指定x1 and x2两个向量,
向量可以是字符型和数字型。(注意:x1 and x2向量的长度必须相等
可以使用(x=data.frame(‘重量’=x1,’运费’=x2)) 来替换x1 and x2的列头,相当于sql语句中的
字段的别名。(注意:跟sql不一样的地方是它是直接替换掉了,但sql只是个别名)
三、画散点图
函数plot()
这个函数主要的作用是用来画图的。(在后续讲解)
四、读文本文件数据
函数 read.table()
>(X=read.table("/root/R/2/abc"))
V1V2
1 176 85
2 168 80
3 156 60
4 167 60
5 170 90
6 171 95
读剪切板操作
> y<-read.table("/root/R/2/abc",header=F) #header是不读列头
> y
V1V2
1 176 85
2 168 80
3 156 60
4 167 60
5 170 90
6 171 95
读excel文件数据另类方法
1、 先安装ODBC源
apt-get installunixodbc unixodbc-dev
2、安装JDK包
1、创建java目录
mkdir /usr/java
2、解压包到/usr/java
tar –zxvf jdk-8u91-linux-x64.gz
3、在/etc/profile 文件下创建java环境变量(注意:在尾部加入,重启系统生效)
JAVA_HOME=/usr/java/jdk1.8.0_91
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib
export JAVA_HOME
export PATH
export CLASSPATH
2、 安装rjava包和xlsx包
执行命令:R CMD javareconf
root@strom-virtual-machine:/usr/java#R CMD javareconf
Java interpreter: /usr/java/jdk1.8.0_91/jre/bin/java
Javaversion : 1.8.0_91
Java homepath : /usr/java/jdk1.8.0_91
Javacompiler : /usr/java/jdk1.8.0_91/bin/javac
Java headersgen.: /usr/java/jdk1.8.0_91/bin/javah
Java archivetool: /usr/java/jdk1.8.0_91/bin/jar
trying tocompile and link a JNI program
detected JNI cppflags : -I$(JAVA_HOME)/include-I$(JAVA_HOME)/include/linux
detected JNIlinker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
gcc -std=gnu99-I/usr/share/R/include -DNDEBUG -I/usr/java/jdk1.8.0_91/include-I/usr/java/jdk1.8.0_91/include/linux -fpic -g -O2-fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c conftest.c -o conftest.o
gcc -std=gnu99-shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o conftest.soconftest.o -L/usr/java/jdk1.8.0_91/jre/lib/amd64/server -ljvm -L/usr/lib/R/lib-lR
JAVA_HOME : /usr/java/jdk1.8.0_91
Java librarypath: $(JAVA_HOME)/jre/lib/amd64/server
JNI cppflags : -I$(JAVA_HOME)/include-I$(JAVA_HOME)/include/linux
JNI linker flags: -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
Updating Javaconfiguration in /usr/lib/R
Done.
进入R语言环境安装rjava和xlsx包
install.packages("rJava")
install.packages("xlsx")
安装顺利的话就结束了
3、 使用read.xlsx() 函数读xlsx文件
>read.xlsx(file="/root/R/02/text.xlsx",header=T,sheetIndex=1)
X170 X45
1 165 80
2 168 70
3 169 85
五、循环语句
For语句
> a <-c(1,59) #将向量1到59赋值给a
> for (i in 1:59) {a[i]=i*2+3} #循环执行1到59的值,每次值*2+3
> a
[1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
[20] 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79
[39] 81 83 85 87 89 91 93 95 97 99101 103 105 107 109 111 113 115 117
[58] 119 121
While语句
> a[1]=5
> i=1
> while (a[i]<121){i=i+1;a[i]=a[i-1]+2} #满足a的值小于121才能进入循环体执行
> a
[1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41
[20] 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79
[39] 81 83 85 87 89 91 93 95 97 99101 103 105 107 109 111 113 115 117
[58] 119 121
六、执行R脚本
使用函数source() 、print()
root@strom-virtual-machine:~/R/02#cat text.r
a <- c(1,59);
a[1]=5;
i=1;
while(a[i]<121) {i=i+1;a[i]=a[i-1]+2};
print(a);
七、综合性例子
模拟产生统计专业同学的名单(学号区分),记录数学分析,线性代数,概率统计十三科成绩,然后进行一些统计分析
>num=seq(10378001,10378100) #代表100个学号
> num
[1] 10378001 10378002 10378003 1037800410378005 10378006 10378007 10378008
[9] 10378009 10378010 10378011 1037801210378013 10378014 10378015 10378016
[17] 10378017 10378018 10378019 1037802010378021 10378022 10378023 10378024
[25] 10378025 10378026 10378027 1037802810378029 10378030 10378031 10378032
[33] 10378033 10378034 10378035 1037803610378037 10378038 10378039 10378040
[41] 10378041 10378042 10378043 1037804410378045 10378046 10378047 10378048
[49] 10378049 10378050 10378051 1037805210378053 10378054 10378055 10378056
[57] 10378057 10378058 10378059 1037806010378061 10378062 10378063 10378064
[65] 10378065 10378066 10378067 1037806810378069 10378070 10378071 10378072
[73] 10378073 10378074 10378075 1037807610378077 10378078 10378079 10378080
[81] 10378081 10378082 10378083 1037808410378085 10378086 10378087 10378088
[89] 10378089 10378090 10378091 1037809210378093 10378094 10378095 10378096
[97] 10378097 10378098 10378099 10378100
使用runif和rnorm 函数
ruif() 函数是均匀分布函数
>x1=round(runif(100,min=80,max=100))
#使用均匀分布100个元素,下线是80 ,上线是100,最后四舍五入
> x1
[1] 88 83 83 95 92 97 91 99 93 95 85 99 85 90 86 87 91 98
[19] 83 99 90 82 80 89 92 85 80 90 80 100 86 93 99 80 87 93
[37] 96 88 96 96 91 95 83 88 95 93 91 86 85 85 93 82 97 89
[55] 96 83 85 95 87 83 88 90 98 96 95 86 84 95 92 92 86 82
[73] 90 96 87 93 87 91 80 86 92 81 81 95 95 97 93 83 98 90
[91] 100 96 95 87 90 93 86 89 95 87
rnorm() 函数是正太分布函数
>x2=round(rnorm(100,mean=80,sd=7))
#正太分布100个元素,平均值是80分,标准差是7,最后四舍五入
> x2
[1] 75 77 78 96 86 80 73 78 84 88 72 77 73 71 75 63 84 77
[19] 65 75 100 84 76 87 73 74 83 80 72 76 71 76 95 94 79 74
[37] 81 89 75 77 80 69 74 73 89 74 90 83 76 67 69 77 82 83
[55] 76 89 74 74 82 73 86 80 69 82 72 78 85 74 77 86 71 86
[73] 80 83 75 71 74 87 82 80 85 81 80 74 78 77 94 71 72 78
[91] 88 76 76 89 88 73 74 80 89 75
>x3=round(rnorm(100,mean=83,sd=18))
#正太分布100个元素,平均值是83,标准差是18,最后四舍五入
(注意:正太分布没有上线跟下线的概念,而这里只有平均值和标准差,所以这里超出100)
> x3
[1] 65 97 73 81 85 122 74 92 87 103 52 78 66 81 121 97 118 90
[19] 64104 90 100 73 83 67 97 77 79 68 110 121 72 85 91 73142
[37] 86 78 90 70 72 98 100 99 26 91 68 82 80 68109 78 63 89
[55] 82 83 109 64 69118 93 87 103 94 92 84 75 72 88 62 102 79
[73] 63 87 88 96100 111 51 64 106 108 73 69 101 80 112 49 109 100
[91] 82 66 47 53 67 89 70 75 69 77
>x3[which(x3>100)]=100 #把超过100分的值全部替换成100
> x3
[1] 65 97 73 81 85100 74 92 87 100 52 78 66 81 100 97 100 90
[19] 64100 90 100 73 83 67 97 77 79 68 100 100 72 85 91 73100
[37] 86 78 90 70 72 98 100 99 26 91 68 82 80 68100 78 63 89
[55] 82 83 100 64 69100 93 87 100 94 92 84 75 72 88 62 100 79
[73] 63 87 88 96100 100 51 64 100 100 73 69 100 80 100 49 100 100
[91] 82 66 47 53 67 89 70 75 69 77
合成数据框并保存到硬盘上
使用的函数是data.frame() 、write.table()
>x=data.frame(num,x1,x2,x3) #使用数据框进行输出值
> x
num x1 x2 x3
1 10378001 88 75 65
2 10378002 83 77 97
3 10378003 83 78 73
4 10378004 95 96 81
5 10378005 92 86 85
6 10378006 97 80 100
7 10378007 91 73 74
8 10378008 99 78 92
9 10378009 93 84 87
>write.table(x,file="/root/R/02/mark.txt",col.names=F,row.names=F,sep="")
使用write.table函数将data.frame(num,x1,x2,x3)写入到/root/R/02/mark.txt文件中
计算各科平均分
使用函数mean()、colMeans()、apply()
>mean(x) #算出各科的平均值
num x1 x2 x3
10378050.50 90.88 88.56 89.10
>colMeans(x) #对列求平均值
num x1 x2 x3
10378050.50 89.88 78.56 79.10
> colMeans(x)[c("x1","x2","x3")] #求出x1,x2,x3的平均值,学号去除
x1 x2 x3
89.88 78.56
>apply(x,2,mean)
#在x框上对列做平均值
(注意:“2”表示在列上做平均值,“1”表示行)
num
10378050.50 89.88 78.56 79.10
> apply(x,2,max) #在列上求最大值(最高分)
num x1 x2 x3
10378100 100 96 100
> apply(x,2,min) #在列上求最小值(最低分)
num x1 x2 x3
10378001 81 58 28
> apply(x[c("x1","x2","x3")],1,sum)
#先把x1,x2,x3值取出后,在每一行值算出和
[1] 275 260 231 259 253 251253 225 265 271 228 276 265 237 252 239 240 280
[19] 234 277 244 252 263 242282 270 241 283 233 240 226 222 241 250 275 221
[37] 244 265 244 230 208 267229 250 275 267 207 262 233 280 218 263 222 266
[55] 240 224 259 236 249 226256 262 232 249 255 233 244 260 271 244 228 198
[73] 215 258 226 242 260 237227 276 272 262 261 271 244 253 247 250 226 227
[91] 265 217 221 260 238 244237 242 261 263