• 1.数据对象及其类型——R语言与数据分析


    一、基本语法语句

    1、R语言在线帮助系统(网站)命令:

    help.start()、topic、help(topic)、help.search(topic)等命令

    2、R中内嵌的帮助工具

    命令:?solve()、help(solve)

    二、R中数据对象及其类型

    基本四种类型
    1、数值型

    包括整型、单、双精度实型

    对象的数据类型和长度可以分别通过mode()和length()得到

    ⭐️R中可以正确的表示无穷的数值,如用Inf和-Inf表+∞和-∞

    2、字符型

    用双或单引号界定

    ⭐️双引号下要引用双引号可以用 \ 转义

    3、复数型

    一些处理复数的特别的函数

    如 Re(z)获取复数实部

    4、逻辑型

    取非(!)、取与(&和&&)、取或(|和||)

    三、对象

    1、对各数据对象的说明

    向量:一个变量的取值

    因子:一个分类的变量

    数组:一个多位的数据表

    矩阵:数据框

    数组和矩阵中所有元素必须为同一类型 ;

    数据框由一个 / 几个向量或因子构成,他们必须等长,但可以是不同数据类型

    2、对象的显示和删除

    显示

    ①显示所有在内存中的对象(名):ls()

    ②显示名称中带有指定字符的对象:用pattern属性指定 即 ls(pattern=“m”)

    ③显示名称中以某个字母开头的对象:ls(pattern=“^m”)

    ④显示所有对象的详细信息:ls.str()

    删除

    删除某个对象:rm()

    3、R语言中向量
    (1)数值型向量

    常用四种方法建立:

    seq()、rep()、c()、scan()

    ①seq()或":" :适合较简单规律向量

    eg:
    > 1:3
    [1] 1 2 3
    > z<-seq(1,3,by=0.5)  等价于 seq(from=1,to=3,by=0.5)
    [1] 1.0 1.5 2.0 2.5 3.0
    

    ②rep() :适合较复杂规律的向量

    eg:
    > z<-rep(2:4,2) 等价于rep(2:5,times=2)
    > z   [1] 2 3 4 2 3 4
    > z<-rep(1:3,rep(2:3))  /3个数,每个重复2/  
    > z   [1] 1 1 2 2 3 3
    > z<-rep(1:3,time=3,each=2)  /每个数重复2,整体重复3次/ 
    > z   [1] 1 1 2 2 3 3 1 1 2 2 3 3 
    

    ③c():向量没有规律

    eg:
    > x<-c(5,2,34,20) 
    > x  [1] 3 2 34 20
    

    ④scan():通过键盘逐个输入

    > z<-scan()
    >1:33
    >2:45
    >3:9
    >         //两个回车即可结束输入
    Read 3 items
    >z
    [1] 33 45 9 
    
    
    (2)字符型向量
    eg:
    > z<-("green","red")
    

    函数paste()可以接收任意个数参数,并从中逐个取出字符拼接成字符串,生成字符串个数与参数中最长字符串长度相同

    eg:
    > z <- paste(c("x","y"),1:3,seq=":")   //默认字符串间用空格分隔,且不能接收指定
    >z
    [1] "x 1" [2] "y 2" [3] "x 3"
    
    (3)逻辑型向量

    逻辑型向量值可是TRUE、FALSE、NA

    (4)因子型向量

    利用函数**factor()**创建,其调用格式如下

    factor(x,levels=sort(unique(x),na.last=TRUE),labels=levels,exclude=NA,ordered=is.orderd(x) )

    x: 为创建因子的数据,是一个向量;

    levels:因子数据的水平,默认是x中不重复的值(即不重复数据个数);

    labels:指定水平因子名称,默认取levels的值;

    exclude:从x中剔除的水平值,默认为NA值;

    ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,否则取FALSE;

    nmax:水平个数的限制。

    字符型因子和数值型因子可相互转化

    ①字符型向量转换为因子
    > a<-c("freen","blue","green","yellow")   //将向量赋值给a
    > a<-factor(a)			//将a转化为因子并重新赋值
    > a
    [1] freen blue green yellow
    Levels: blue freen green yellow
    
    ②数值型向量转换为因子
    > a<-c(1,2,3,2)   //将向量赋值给a
    > a<-factor(a)			//将a转化为因子并重新赋值
    [1] 1 2 3 2
    Levels: 1 2 3
    
    ③字符型因子转化为数值型因子
    > a<-c("green","blue","green","yellow")
    > a<-factor(a)  //转化为因子
    > a
    [1] green blue green yellow
    Levels: blue green green yellow
    > levels(a)<-c(1,2,3,4)  
    > a
    [1] 2 1 2 3
    Levels: 1 2 3 4
    

    **函数levels()**用来提取一个因子中可能水平数

    **函数gl()**可产生规则的因子序列:

    gl(k,n) k为水平数;n是每个水平重复的次数;除此外此函数还有可选属性:①length指定产生数据的个数,label指定水平因子的名称

    eg1: gl()
    > gl(3,4)
    [1] 1 1 1 1 2 2 2 2 3 3 3 3 
    Levels:1 2 3
    eg2:带length和label的gl()
    > gl(2,3,length=9,label=c("Yes","No"))
    [1] Yes Yes Yes No  No  No  Yes Yes Yes
    Levels: Yes No
    
    4、向量的运算(略)
    5、常见统计函数

    向量中 最大元素:max(x) 最小元素:min(x) 最大元素的下标**(R是从1开始)**:which.max(x)

    ​ 最小元素下标:which.min() 均值:mean() 元素总和:sum(x) 元素乘积:prod(x)

    ​ 向量长度:length(x) 向量逆序:rev(x)

    ​ 升序排列:sort(x) 属性decreasing=TRUE表降序 升序的秩(序号):order(x)decreasing=TRUE表降序的秩

    ​ 向量的秩(未排序的):rank(x)

    6、向量的下标与子集(元素)的提取

    分4种不同类型来提取

    ①正整数向量

    x[1:4]选取4个元素; x[c(1,3)]选取1、3个元素

    ②负整数向量

    x[-(1:4)]去除前4个元素;

    ③字符型向量:用于提取有names属性并由它来区分(即不能重复names,否则出现混乱情况)向量中元素元素的向量

    eg:
    > x<-c(1,3,5,7)
    > names(x)<-c("red","yellow","blue","green")
    > x
       red yellow   blue  green 
         1      3      5      7 
    > choiceColor<-x[c("red","blue")]
    > choiceColor
     red blue 
       1    5 
    

    ④逻辑型向量:取出满足条件的元素(即返回TRUE)

    > x<-c(1,3,5,45,21)
    > x>10
    [1] FALSE FALSE FALSE  TRUE  TRUE
    > x[x>10]
    [1] 45 21
    
    7、数组与矩阵

    数组是一个k(大于等于1)维的数据表,矩阵是数组的特例,其维数k=2

    (1)数组的建立

    array(data,dim,dimnames)

    由array()函数建立,data为向量;dim为数组维数向量(数值型);dimnames为由各维名称构成的向量(字符型),缺省为空

    eg:
    > a<-array(1:4,dim=c(1,2,2))
    > a
    , , 1
         [,1] [,2]
    [1,]    1    2
    , , 2
         [,1] [,2]
    [1,]    3    4
    > dim(a)
    [1] 1 2 2
    > dimnames(a)<-list(c("行1"),c("列1","列2"),c("数组1","数组2"))
    > a
    , , 数组1
        列1 列2
    行1   1   2
    , , 数组2
        列1 列2
    行1   3   4
    
    (2)矩阵的建立

    也可用array()建立,但更常用matrix(),对角矩阵则用diag()更方便

    • R中矩阵元素默认按列排
    eg:
    > A<-array(1:6,c(2,3))
    > A
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    > B<-matrix(1,nr=2,nc=2)  #元素为1,2行,2列
    > B
         [,1] [,2]
    [1,]    1    1
    [2,]    1    1
    > C<-diag(3)
    > C
         [,1] [,2] [,3]
    [1,]    1    0    0
    [2,]    0    1    0
    [3,]    0    0    1
    

    指定行名,列名:

    rownames(x)<-c(“a”,“b”)

    colnames(x)<-c(“c”,“d”)

    指定矩阵数据项填充方向:

    由参数byrow指定,缺省为按列填充(byrow=FALSE)

    eg:
    > x<-matrix(1:6,2,3)
    > x
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    > x<-matrix(1:6,2,3,byrow = TRUE)
    > x
         [,1] [,2] [,3]
    [1,]    1    2    3
    [2,]    4    5    6
    
    (3)数组与矩阵的下标和子集(元素)的提取
    > x<-matrix(1:6,2,3)
    > x
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    > x[2,2]#提取位于第二行第二列的元素
    [1] 4
    > x[,2] #提取第二列的元素
    [1] 3 4
    > x[,2,drop=FALSE]  #避免数据库转换成因子
         [,1]
    [1,]    3
    [2,]    4
    > x[-1,] #去掉第一行
    [1] 2 4 6
    > x[,3]<-NA #添加与替换元素
    > x
         [,1] [,2] [,3]
    [1,]    1    3   NA
    [2,]    2    4   NA
    > x[is.na(x)<-1] #缺失值用1代替
    [1] 1
    > x[is.na(x)]<-1 #缺失值用1代替
    > x
         [,1] [,2] [,3]
    [1,]    1    3    1
    [2,]    2    4    1
    
    (4)矩阵的运算函数
    • 代数运算

    ①转置函数t():(行列转换)

    ②提取对角元diag():提取矩阵对角线上(一条)的元素

    ③两矩阵按行合并rbind()和按列合并cbind()

    rbind(矩阵1,矩阵2) #按行合并,即矩阵2以行增加在在矩阵1下面
    

    ⑤逐元乘积“ * ” :两矩阵相对应位置上乘积,矩阵行列数需相同

    • 统计运算

    ①对对象施加某种运算的函数:apply()

    >apply(x,MARGIN,FUN)
    x:矩阵	MARGIN=1按列计算,=2按行运算	FUN:+-*\等运算符
    

    ②sweep()函数

    ③scale()函数

    8、数据框

    与矩阵和二维数组形式类似,不同的是其行列意义。列表示变量,行表示观测值

    (1)数据框的建立

    ①建立一些向量并用他们生成数据框

    > x=c(42,7,64,9)
    > y=1:4
    > z=data.frame(INDEX=y,VALUE=x)
    > z
      INDEX VALUE
    1     1    42
    2     2     7
    3     3    64
    4     4     9
    
    • 数据框中向量必须有相同长度或有倍数关系(按"循环"整数次)

    ②间接建立:通过函数read.table()读取数据文件(文本文件、Excel等)的观测值来建立

    >zsq<-read.table(file="‪D:\桌面\zsq.txt",header=T)
    >zsq
    	Treat	weight
    1	A		4.5
    2	B		NA
    3	C		6.8
    #  header=T的含义是表示第一行为标题行,默认是F
    
    (2)数据框适用函数
    (3)数据框的下标和子集(元素)的提取
    • 与矩阵基本相同,不同的是数据框列可以使用变量的名称
    #1、提取单个元素
    >Puromycin[1,1]	#提取位于第一行第一列的元素
    [1]0.02
    #2提取一个子集
    >Puromycin[c(1,3,5),c(1,3)]	#提取位于第1、3、5行,第1、3列的元素
    >Puromycin[c(1,3,5),c("conc","state")]	#提取位于第1、3、5行,变量名为conc、state的元素
    #3提取一列
    >Puromycin$conc 等价于Puromycin[,1]
    #4提取满足条件的子集
    >subset(Puromycin,state=="treated"&rate>160)
    
    (4)数据框添加新变量
    • 三种方法

    以在Puromycin中增加变量icon为例,其定义为1/conc

    ①基本方法:

    >Puromycin$iconc<-1/Puromycin$conc
    

    ②with()函数

    >Puromycin$icons<-with(Puromycin,1/conc)
    

    ③transform()函数,且可一次性定义多个变量

    >Puromycin<-transform(Puromycin,icon=1/conc,sqrtconc=sqrt(conc))
    
    9、时间序列
    10、列表
    • 包含任何类型的对象

    用函数==list()==创建,其创建方法,默认没有对象名称,下标和子集提取等和数据框一样

    > L=list(1:6) #一个对象的列表
    > L
    [[1]]
    [1] 1 2 3 4 5 6
    > L=list(1:6,"列表数据2",matrix(1:4,nrow=2)) #三个对象的列表
    > L
    [[1]]
    [1] 1 2 3 4 5 6
    
    [[2]]
    [1] "列表数据2"
    
    [[3]]
         [,1] [,2]
    [1,]    1    3
    [2,]    2    4
    
    > L=list(x=1:6,x2="列表数据2",y=matrix(1:4,nrow=2)) #给对象添加了名称的列表数据
    > L
    $x
    [1] 1 2 3 4 5 6
    
    $x2
    [1] "列表数据2"
    
    $y
         [,1] [,2]
    [1,]    1    3
    [2,]    2    4
    
  • 相关阅读:
    tomcat启动,测试被拒绝连接
    前端 vue 项目屏蔽右键
    通用大模型研究重点之五:llama family
    图论---最小生成树
    怎么把走线限制在两个孔中间?
    【Flink】一文解析Flink如何实现状态管理和容错机制
    Rapid普通版DVSSL
    数仓开发之DIM层
    深度学习之卷积模型应用
    Analyzing User-Level Privacy Attack Against Federated Learning
  • 原文地址:https://blog.csdn.net/weixin_53920044/article/details/126961906