R语言学习总结---基本数据类型

来源:互联网 发布:企业工单管理系统源码 编辑:程序博客网 时间:2024/06/05 14:48

在大二就已经开始学R了,但是一直没有一篇总结的文章,今天顺便上来总结一下R语言的快速上手命令,以备日后翻阅。

  • R的介绍
  • R的基本操作
  • 基本数据类型
  • 数据操作
  • 语法
  • 绘图操作
  • 一些包的介绍

一、R的介绍

R是一种开源而且免费的软件。在统计学家中比较流行,它轻巧简便,约43M(相比matlab光是安装包就要接近8G)。R官网上还有许多已经开发好的包,可以直接下载来调用。R在统计功能上更加强大,

R的下载和安装在这里不阐述,网上有比较多的指南。在这里,我使用了R的一款很友好的IDE-——Rstudio。原始的R界面非常的简洁,但是不利于编程,而Rstudio是仿照matlab的用户界面,用起来比较方便。

Rstudio用户界面


二、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可以安装,会有下一步的提示
    点击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 1802 1853 2924 2765 3616 3957 383> student=data.frame(class=x,sex=y,score=z) #数据框的列名默认为变量名,也可以对列名进行重新命名> student  class sex score1     1802     1853     2924     2765     3616     3957     383> row.names(student)=c("王 x","张 x","赵 x","刘 x","黄 x","孙 x"," 李 x") #对数据框的行名进行修改> student      class sex score王 x      180x      185x      292x      276x      361x      395x     383> 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()对因子进行排序。

数据操作、语法、绘图操作、包的应用将另起一章。

0 0
原创粉丝点击