R语言学习总结---基本数据类型
来源:互联网 发布:企业工单管理系统源码 编辑:程序博客网 时间:2024/06/05 14:48
在大二就已经开始学R了,但是一直没有一篇总结的文章,今天顺便上来总结一下R语言的快速上手命令,以备日后翻阅。
- R的介绍
- R的基本操作
- 基本数据类型
- 数据操作
- 语法
- 绘图操作
- 一些包的介绍
一、R的介绍
R是一种开源而且免费的软件。在统计学家中比较流行,它轻巧简便,约43M(相比matlab光是安装包就要接近8G)。R官网上还有许多已经开发好的包,可以直接下载来调用。R在统计功能上更加强大,
R的下载和安装在这里不阐述,网上有比较多的指南。在这里,我使用了R的一款很友好的IDE-——Rstudio。原始的R界面非常的简洁,但是不利于编程,而Rstudio是仿照matlab的用户界面,用起来比较方便。
二、R的基本操作
- 系统设置
R的注释符号是#
rm(list=ls())#清理系统内存,还可以用ctrl+L清空命令窗口options(digits=4)#设定输出数的位数par(mar=c(4,4,2,1)+0.1,cex=0.8)#绘图时使用,相当于把绘图界面分成4份
- 读取数据
data=read.csv('“数据网址”')data=read.table('clipboard',header=T)#用clipboard比较方便,#只需要复制需要读取的数据,然后执行这条命令即可
包的安装和载入
包的安装有两种方式:一是直接用install.packagea(“包名”),二是在Rstudio上有选项可以安装。点击Package内的install可以安装,会有下一步的提示
例如我想装ggplot2包,点击“install”即可包的载入:library(包名)
library(ggplot2)
基本数据类型
先介绍一下R中的数据类型:向量、矩阵、数组、列表、因子、数据框
R的数据对象:数值型、字符型、逻辑型、日期型等,还有缺失值(not available,NA)
向量
- 赋值
x=c(1,2,3,4,5)assign('x',c(1,2,3,4,5))#等价于上一条语句
- 运算
> x=c(1,2,3,4);y=c(7,8,9,4)#注意'>'不要加进去,这只是命令提示符> v=2*x+y+1;v#向量之间可以进行加减乘除,就是对应分量运算[1] 10 13 16 13> exp(x)[1] 2.718282 7.389056 20.085537 54.598150> sqrt(y)[1] 2.645751 2.828427 3.000000 2.000000
- 相关函数
> x=c(10,11,6,9,5)> min(x)#求最小值[1] 5> max(x)#求最大值[1] 11> range(x)#求极值[1] 5 11> which.min(x)#求最小值的“索引”(位置)[1] 5> which.max(x)#求最大值的“索引”(位置)[1] 2> sum(x)#对向量求和[1] 41> length(x)#求向量的长度[1] 5> sort(x)#对向量x从小排序[1] 5 6 9 10 11> median(x)#求中位数[1] 9
- 逻辑向量
> x[1] 10 11 6 9 5> a=x<8> a#a是逻辑值[1] FALSE FALSE TRUE FALSE TRUE
- 字符型向量
> y=c("er","ss","jk","dim")> y[1] "er" "ss" "jk" "dim"> paste("Hello",",","World")#把字符串连接成一个字符串[1] "Hello , World"> paste("day.",1:5,sep="")[1] "day.1" "day.2" "day.3" "day.4" "day.5"> paste("day.",1:5)#注意到没有sep时,连接是有空格的[1] "day. 1" "day. 2" "day. 3" "day. 4" "day. 5"
- 复数向量
> complex(re=1:3,im=6:9)#re对应的是实部,im对应的是虚部[1] 1+6i 2+7i 3+8i 1+9i
- 使用向量下标(可以查看、修改、删除)
> x=seq(1,8,3);x#产生在1到8之间间隔为3的序列[1] 1 4 7> x[2]#查看向量x的第二个数[1] 4> x[2]=25;x#还可以直接修改数据[1] 1 25 7> x[c(1,3)]=c(15,13);x[1] 15 25 13> x[x<20]#取出所有x<20为真的元素[1] 15 13> z=c(-1,1:3,NA)> > is.na(z)#is.na(x)用于识别x中缺失值,返回逻辑值[1] FALSE FALSE FALSE FALSE TRUE> z[1] -1 1 2 3 NA> y=z[!is.na(z)];y#'!'表示“非”[1] -1 1 2 3> v=10:20> v[-c(1:5)]#取出除了出c(1:5)的v中的元素,并不会改变v,v还是10:20[1] 15 16 17 18 19 20> v [1] 10 11 12 13 14 15 16 17 18 19 20
矩阵
- 创建(matrix())
> matrix(1:8,nrow=2,ncol=4)#默认按列> [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8> A=matrix(1:8,nrow=4,ncol=2,byrow=T)#按行 [,1] [,2][1,] 1 2[2,] 3 4[3,] 5 6[4,] 7 8> nrow(A)#行数[1] 4> ncol(A)#列数[1] 2> t(A)#A的转置 [,1] [,2] [,3] [,4][1,] 1 3 5 7[2,] 2 4 6 8
- 合并
>D=matrix(1:9,3,3);D [,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9>V=matrix(c(4,6,8,2,3,1,9,7,3),3,3);V[,1] [,2] [,3][1,] 4 2 9[2,] 6 3 7[3,] 8 1 3> DV=rbind(D,V);DV#按照row合并,还有cbind按照col合并 [,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9[4,] 4 2 9[5,] 6 3 7[6,] 8 1 3
- 拉直
> as.vector(D)#将D拉直成一个向量,但没有改变D[1] 1 2 3 4 5 6 7 8 9> D [,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9
- 维名字
>dimnames(D)=list(c("one","two","three"),c("first","second","third"));D#这种方式是先定义了D,在定义维名字 first second thirdone 1 4 7two 2 5 8three 3 6 9> G=matrix(1:4,2,2,dimnames = list(c("one","two"),c("first","second")));G#这种方式是在定义时便定义维名字 first secondone 1 3two 2 4
- apply函数(一种很高效的函数)
> D first second thirdone 1 4 7two 2 5 8three 3 6 9> apply(D,1,sum) one two three 12 15 18 > apply(D,2,sum) first second third 6 15 24
- 加减(+/-)
> B=matrix(5:12,nrow=4,ncol=2,byrow=T)> B [,1] [,2][1,] 5 6[2,] 7 8[3,] 9 10[4,] 11 12> A+B#矩阵加减维数一致才可以 [,1] [,2][1,] 6 8[2,] 10 12[3,] 14 16[4,] 18 20> B-A [,1] [,2][1,] 4 4[2,] 4 4[3,] 4 4[4,] 4 4
- 数乘(*)
> 6*A [,1] [,2][1,] 6 12[2,] 18 24[3,] 30 36[4,] 42 48
- 乘法(%*%)
> A%*%t(B) [,1] [,2] [,3] [,4][1,] 17 23 29 35[2,] 39 53 67 81[3,] 61 83 105 127[4,] 83 113 143 173
- 对角元素运算
> C=matrix(1:9,3,3);C [,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9> diag(C)#提取对角元素[1] 1 5 9> diag(3)#还可以用来产生单位阵 [,1] [,2] [,3][1,] 1 0 0[2,] 0 1 0[3,] 0 0 1> diag(diag(C))#产生一个以C的对角元素为对角元素的对角阵 [,1] [,2] [,3][1,] 1 0 0[2,] 0 5 0[3,] 0 0 9
- 特征值与特征向量
> B=matrix(c(4,6,8,2,3,1,9,7,3),3,3)> eigen(B)$values[1] 13.794636 -4.939388 1.144751$vectors [,1] [,2] [,3][1,] -0.5845115 -0.6940686 0.07756881[2,] -0.6445169 -0.1035974 -0.97817450[3,] -0.4928938 0.7124159 0.19276342
- 求逆
> solve(B)#方阵才能求逆 [,1] [,2] [,3][1,] -0.02564103 -0.03846154 0.1666667[2,] -0.48717949 0.76923077 -0.3333333[3,] 0.23076923 -0.15384615 0.0000000
数组
矩阵是二维数组,所以数组的运算和矩阵有类似的地方
- 创建
> X=array(1:12,dim=c(2,3,2))> X, , 1 [,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6, , 2 [,1] [,2] [,3][1,] 7 9 11[2,] 8 10 12> a=1:24; dim(a)=c(2,3,4);a#这是另一种定义方式, , 1 [,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6, , 2 [,1] [,2] [,3][1,] 7 9 11[2,] 8 10 12, , 3 [,1] [,2] [,3][1,] 13 15 17[2,] 14 16 18, , 4 [,1] [,2] [,3][1,] 19 21 23[2,] 20 22 24
- 下标
> a[1,2:3,2:3]#留意这种读取数据的方式 [,1] [,2][1,] 9 15[2,] 11 17> a[1,1,]#只是取了每一页的第一行第一列的元素[1] 1 7 13 19> a[3:10]#这是一种特殊的取法,相当于忽略了数组的维数信息,把表达式看作是对数组的数据向量取子集[1] 3 4 5 6 7 8 9 10
- 四则运算(与矩阵一致)
列表
列表是一种特别的对象组合,其元素由序号(下标)区分,但各元素的类型可以是任意对象。列表不同于向量的是,列表每次只能引用一个元素。
- 创建
> Lst=list(name="Fred",wife="Mary",no.children=3,child.ages=c(4,7,9))#创建> Lst$name[1] "Fred"$wife[1] "Mary"$no.children[1] 3$child.ages[1] 4 7 9> Lst[[2]]#注意这种取法与数组和向量的区别[1] "Mary"> Lst[["wife"]]#还可以用元素名作为下标[1] "Mary"> Lst[[4]][2][1] 7
- 修改
> Lst$name="John"#直接修改> Lst$name[1] "John"$wife[1] "Mary"$no.children[1] 3$child.ages[1] 4 7 9> Lst$income=c(1980,1600)#直接添加> Lst$name[1] "John"$wife[1] "Mary"$no.children[1] 3$child.ages[1] 4 7 9$income[1] 1980 1600> Lst$income=NULL#删除就是赋为NULL> Lst$name[1] "John"$wife[1] "Mary"$no.children[1] 3$child.ages[1] 4 7 9
因子factor、数据框dataframe
统计学中有几种重要的类别:区间变量、名义变量、有序变量。区间变量是连续的,可以进行求和、求平均等运算。
名义变量和有序变量是离散的,可以是数值,也可以是字符型,其数值不能用来加减乘除,只能用来分类或者计数。
因子就是为了名义变量和有序变量服务的。
因子用来存储类别变量(categorical variables)和有序变量,这类变量不能用来计算而只能用来分类或者计数。因子表示分类变量,有序因子表示有序变量。
在这里引用王斌会教授的(R语言统计分析软件简明教程)中的例子,了解下因子的使用。学生成绩的例子。
> x=c(1,1,2,2,3,3,3) #班别的号码> y=c("女","男","男","女","女","女","男") #性别> z=c(80,85,92,76,61,95,83) #成绩> student=data.frame(x,y,z) #组成数据框> student x y z1 1 女 802 1 男 853 2 男 924 2 女 765 3 女 616 3 女 957 3 男 83> student=data.frame(class=x,sex=y,score=z) #数据框的列名默认为变量名,也可以对列名进行重新命名> student class sex score1 1 女 802 1 男 853 2 男 924 2 女 765 3 女 616 3 女 957 3 男 83> row.names(student)=c("王 x","张 x","赵 x","刘 x","黄 x","孙 x"," 李 x") #对数据框的行名进行修改> student class sex score王 x 1 女 80张 x 1 男 85赵 x 2 男 92刘 x 2 女 76黄 x 3 女 61孙 x 3 女 95 李 x 3 男 83> y=c("女","男","男","女","女","女","男") > f=factor(y) #factor()生成因子> f #查看因子[1] 女 男 男 女 女 女 男Levels: 男 女> levels(f) #可以利用函数 levels()列出因子水平[1] "男" "女"#上面的每个因子并不表示因子的大小,倘若要表示因子之间 有大小顺序(考虑因子之间的顺序),则可以利用 ordered()函 数产生。>score_f=c("B","C","D","B","A","D","A") >score_o=ordered(score_f,levels=c("D","C","B","A") )> score_o[1] B C D B A D A Levels: D < C < B < A
factor()生成因子,ordered()对因子进行排序。
数据操作、语法、绘图操作、包的应用将另起一章。
- R语言学习总结---基本数据类型
- R语言之基本数据类型
- R语言学习笔记<数据类型>
- R语言学习二 数据类型
- R语言入门学习--数据类型
- R语言学习总结
- R语言基础入门2--基本数据类型
- C语言学习重点总结(一)基本数据类型分析
- 【R语言读书学习笔记3】R语言数据类型
- R与数据分析学习总结之一:R语言基本操作
- R 语言学习笔记一 :数据类型
- JAVA基本数据类型学习总结
- R语言基本语法(R语言学习二)
- R语言基本数据类型和一些一本函数
- C语言基础知识总结(1)-基本数据类型
- C语言的基本数据类型总结
- C语言总结之基本数据类型
- C语言的基本数据类型总结
- iBatis/mybits与Hibernate
- C深度剖析读书笔记-第三章预处理
- spring 源码学习-class方法创建类
- CSDN日报20170512 ——《程序员,你为什么值这么多钱?》
- tensorflow:深入mnist代码注释
- R语言学习总结---基本数据类型
- Visual Studio杂记
- PAT甲级1003
- Linux常用命令
- Solr6.5配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer (二)
- 使用JAXB实现JAVA对象和XML字符串的互相转换
- [robot]Forward-Kinematics
- cocos网络编程C++版本(视频笔记)
- C# explicit implicit关键字、checked关键字