• R语言-记号体系


    安装xlsx包

    #装之前先装jdk,配置环境变量
    install.packages("xlsx")

     代表安装成功

    必须先加载包然后再使用包
    library()

    $提取符号

    当一个函数里需要返回多个值(比如有变量,有向量,有矩阵)时,我们要用list,而不是return,
    这时如果想提取某个变量的结果,就需要用到$,默认情况下,对于 `list`, `environment` 这两种对象,`$`可以提取(extract)出里面的元素。

    必知必会的函数

    x<-c(7,5,8,9,2)
    #最大值
    max(x)
    #最小值
    min(x)
    #同时获取最大值和最小值
    range(x)
    #后一项减去前一项
    diff(x)
    #极差
    diff(range(x))
    #累加和
    cumsum(x)
    #累计乘积
    cumprod(x)
    #累计求最大值
    cummax(x)
    #累计求最小值
    cummin(x)
    
    #基于矩阵和数据框的函数
    #循环:显式循环、隐式循环
    #显式:for、while、repeat
    #隐式:apply、lapply、sapply
    
    #apply
    #构造矩阵m
    m<-matrix(1:12,nrow = 3,byrow = T)
    #计算矩阵的每一行的和
    # 1代表行,2代表列
    apply(m,1,sum)
    #计算矩阵的每一列的均值
    apply(m,2,mean)
    
    #lapply
    #构造一个列表
    # l是逻辑向量
    x<-list(a=1:10,beta=exp(-3:3),l=c(T,F,F,T))
    #把mean函数作用到x的每一个元素上
    lapply(x,mean)
    
    #sapply
    #s代表简化,简化的是返回数据的数据结构
    sapply(x,mean)
    sapply(3:6,seq)
    sapply(sapply(3:6,seq),sum)

    写入excel文件

    #plyr、openxlsx、xlsx
    install.packages("rJava")
    install.packages("xlsxjars")
    
    install.packages("plyr")
    install.packages("openxlsx")
    #装之前先装jdk,配置环境变量
    install.packages("xlsx")
    
    
    library(xlsx)
    library(openxlsx)
    library(plyr)
    
    pkp<-data.frame(pm=rep(c("A",2:10,"J","Q","K"),times=4),
                    hs=rep(c("红桃","黑桃","梅花","方块"),each=13),
                    ds=rep(1:13,times=4),
                    stringsAsFactors = F)
    #按照花色切分数据框
    pkp_lst<-split(pkp,pkp$hs)
    
    
    #构造写入函数
    xr<-function(x){
      x_n<-unique(x$hs)
      xlsx::write.xlsx(x,file = "扑克牌分类数据.xlsx",
                       sheetName=x_n,
                       row.names=F,
                       append=T)
    }
    l_ply(pkp_lst,xr)

    openxlsx写入Excel

    l#分三步:创建工作簿--添加工作表--保存工作簿
    #第一步:创建工作簿

    #openxlsx写入Excel
    #分三步:创建工作簿--添加工作表--保存工作簿
    #第一步:创建工作簿
    wb<-openxlsx::createWorkbook()
    #第二步:创建一个新的写入函数
    xr<-function(x){
      x_n<-unique(x$hs)
      openxlsx::addWorksheet(wb,sheetName = x_n)
      openxlsx::writeData(wb,x_n,x)
    }
    
    l_ply(pkp_lst,xr)
    
    #第三步:保存工作簿
    openxlsx::saveWorkbook(wb,"openxlsx-pkp.xlsx")

    R的记号体系

    值的选取:对于数据框,提取其中数据的语法为data.frame[i,j]
    括号内有两个索引参数,逗号分隔,索引参数用来告诉R用来提取哪些值:第一个索引选择相应的行,第二个索引选择相应的列。
    六种索引编写方式:
    #索引开始于1 正整数:返回第i行第j列的元素,要提取多个值,使用正整数向量代替单一整数作为索引; 负整数:将返回不包含负整数索引所对应的元素;
    零:返回一个空对象; 空格:提取空格所在索引位置代表维度的所有元素; 逻辑值:匹配索引值为TRUE的位置并提取出相应元素,而忽略所有索引值为FALSE的位置 名称:被索引对象有名称属性时,常见于从数据框中提取列。
    练习:用pkp数据练习数据值的选取。
    #R的记号体系
    #i代表行索引,j代表列索引
    data.frame[i,j]
    #正整数索引
    #取第四行第二列的数据
    pkp<-data.frame(pm=rep(c("A",2:10,"J","Q","K"),times=4),
                    hs=rep(c("红桃","黑桃","梅花","方块"),each=13),
                    ds=rep(1:13,times=4),
                    stringsAsFactors = F)
    #
    pkp[4,2]
    #取第四行到第六行,第三列的数据
    pkp[4:6,3]
    pkp[4:6,3,drop=F]
    
    #取第四行和第六行,第三列的数据
    pkp[c(4,6),3]
    #取第四行到第六行,第二列到第三列的数据
    pkp[4:6,2:3]
    
    #负整数索引
    #不要第四行到第六行的数据,
    #要第二列到第三列的数据
    pkp[-(4:6),2:3]
    
    #零索引
    pkp[0,0]
    
    #空格索引
    #取第二行到第三行,所有列的数据
    pkp[2:3, ]
    pkp[2:3,]
    pkp[2:3,1:3]
    
    #逻辑值索引
    x<-c(7,9,2,5,8)
    #取x>3的值
    x[x>3]
    #取x^2>4x的值
    x^2
    4*x
    x^2>4*x
    x[x^2>4*x]
    #取牌面信息为K的牌
    pkp[pkp[,1]=="K",]
    > #取牌面信息为K的牌
    > pkp[,1]=="K"
     [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
     [9] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    [17] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    [25] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
    [33] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
    [41] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    [49] FALSE FALSE FALSE  TRUE
    > pkp[pkp[,1]=="K",]
       pm   hs ds
    13  K 红桃 13
    26  K 黑桃 13
    39  K 梅花 13
    52  K 方块 13
    
    
    #名称索引
    names(pkp)
    pkp[,"hs"]
    pkp[,c("hs","ds")]
    > names(pkp)
    [1] "pm" "hs" "ds"
    > pkp[,"hs"]
     [1] "红桃" "红桃" "红桃" "红桃" "红桃" "红桃" "红桃"
     [8] "红桃" "红桃" "红桃" "红桃" "红桃" "红桃" "黑桃"
    [15] "黑桃" "黑桃" "黑桃" "黑桃" "黑桃" "黑桃" "黑桃"
    [22] "黑桃" "黑桃" "黑桃" "黑桃" "黑桃" "梅花" "梅花"
    [29] "梅花" "梅花" "梅花" "梅花" "梅花" "梅花" "梅花"
    [36] "梅花" "梅花" "梅花" "梅花" "方块" "方块" "方块"
    [43] "方块" "方块" "方块" "方块" "方块" "方块" "方块"
    [50] "方块" "方块" "方块"
    > pkp[,c("hs","ds")]
         hs ds
    1  红桃  1
    2  红桃  2
    3  红桃  3
    
    
    m[3,2]
    m[5]
    pkp[1]
    x[c(3,5)]

    > x[c(3,5)]
    [1] 2 8
    > # 3行2列
    > m[3,2]
    [1] 10
    > # 只有一个数字时,按照一纬的结构走1、5、9、2、6、10、
    > m[5]
    [1] 6
    > # 数据框本质是列表,取列表第一个元素
    > pkp[1]
       pm
    1   A

    #在同一个维度上,不能同时使用 #正整数索引和负整数索引 x[c(-3,5)] pkp[3:4,-1]
    > #在同一个维度上,不能同时使用正整数索引和负整数索引
    > x[c(-3,5)]
    Error in x[c(-3, 5)] : only 0's may be mixed with negative subscripts
    > #数据框二维结构可以使用正整数索引和负整数索引
    > pkp[3:4,-1]
        hs ds
    3 红桃  3
    4 红桃  4
    
    

    $和[[]]----提取内容

    在R里面,有两种对象可以使用$和[[]]数据框和列表。
    使用方法:
    $示例:pkp$value。
    $解读:当使用$时,R会原封不动地提取元素,因此得到的对象不再是一个列表对象。
    [[]]示例:pkp[[1]]
    [[]]解读:如果使用双中括号,R则返回元素值,而不是它的列表结构。
    #
    pkp_lst$黑桃
    列表 x
    <-list(1:10,exp(-3:3),c(T,F,F,T)) x[[1]] #[]具有结构不变性 x[1] pkp$hs
    > #$和[[]]
    > pkp_lst$黑桃
       pm   hs ds
    14  A 黑桃  1
    15  2 黑桃  2
    16  3 黑桃  3
    
    > x<-list(1:10,exp(-3:3),c(T,F,F,T))
    > x[[1]]
     [1]  1  2  3  4  5  6  7  8  9 10
    > #[]具有结构不变性
    > x[1]
    [[1]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
    > pkp$hs
     [1] "红桃" "红桃" "红桃" "红桃" "红桃" "红桃" "红桃"
    #命名向量
    xx<-c(7,8,9)
    names(xx)<-c("a","b","c")
    xx<-c(a=7,b=8,c=9)
    letters
    names(xx)<-letters[1:3]
    
    xx["a"]
    #去除命名向量的名称属性
    unname(xx["a"])
    xx[["a"]]
    xx[[1]]
    > xx["a"]
    a 
    7 
    > #去除命名向量的名称属性
    > unname(xx["a"])
    [1] 7
    > xx[["a"]]
    [1] 7
    > xx[[1]]
    [1]

    R的记号体系总结:

    #R的记号体系总结:
    #()函数的触发器
    #{}是由若干条程序组成的代码块
    #[],[[]],$执行的是索引的操作

     就地修改

    就地改值:首先明确描述想要修改的数值,然后用赋值符<-更改这些值。这样R会在原始对象内部对这些值进行修改。
    两个注意点: 创建一个原先对象中并不存在的新值,R会自动将对象的长度延伸以适应这个新值。它的这个用途在于提供了一种为数据集添加新变量的绝佳方法。 如果将NULL赋给从数据框中提取的变量,则相当于将该变量从数据框中删除。
    > #生成一个长度为6,元素都为0的向量
    > x<-numeric(6)
    > x[3]<-5
    > x[4:5]<-c(1,2)
    > x
    [1] 0 0 5 1 2 0
    > x[]<-100
    > x
    [1] 100 100 100 100 100 100
    > x[]<-c(2,3)
    > x
    [1] 2 3 2 3 2 3
    > x<-x+100
    > x
    [1] 102 103 102 103 102 103
    > x[1:length(x)]
    [1] 102 103 102 103 102 103
    > x[7]
    [1] NA
    > x[8]<-90
    > x
    [1] 102 103 102 103 102 103  NA  90
    > #pkp新增一列
    > pkp$index<-1:52
    > pkp
       pm   hs ds index
    1   A 红桃  1     1
    2   2 红桃  2     2
    3   3 红桃  3     3

    逻辑表达式

    逻辑取子集:R会返回索引值向量中TRUE的位置所对应的值。
    目标:通过逻辑测试的方法自动生成这些TRUE和FALSE。
    逻辑测试:R的七种逻辑运算符

     

    > 7!=8
    [1] TRUE
    > 7!=c(1:8)
    [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
    > c("小明","小花","小亮")%in%c("小刚","小明")
    [1]  TRUE FALSE FALSE
    > x<-c("小明","小花","小亮")
    > y<-c("小刚","小明")
    > #找x里边有,但是y里边没有的
    > x[!x%in%y]
    [1] "小花" "小亮"
    > #找x里边有,y里边也有的
    > x[x%in%y]
    [1] "小明"
    > #找y里边有的,但是x里边没有的
    > y[!y%in%x]
    [1] "小刚"
    > #将pm信息为3的,ds修改为100
    > pkp$pm=="3"
     [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
     [9] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
    [17] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    [25] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    [33] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    [41] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
    [49] FALSE FALSE FALSE FALSE
    > pkp$ds[pkp$pm=="3"]<-100
    > pkp
       pm   hs  ds
    1   A 红桃   1
    2   2 红桃   2
    3   3 红桃 100
    4   4 红桃   4

     

    布尔运算符:布尔运算符是类似于与和或这样的运算符。
    R的六种布尔运算符

    #布尔运算
    #&并且

    > (1>2)&(4>3)
    [1] FALSE
    > #|或者
    > (1>2)|(4>3)
    [1] TRUE
    > #xor异或 是否只有一个为真
    > xor(1>2,3>4)
    [1] FALSE
    > xor(1>2,3<4)
    [1] TRUE
    > #!非运算 是否为假
    > !(2>1)
    [1] FALSE
    > !FALSE
    [1] TRUE
    > #any,所有的条件中是否至少有一个为真
    > any(c(T,F,F,F,F))
    [1] TRUE
    > #all,所有的条件是否同时为真
    > all(c(T,T,T,T,F))
    [1] FALSE
    > 
    > #将pm信息为黑桃3的点数修改为500
    两个条件:pm==3,hs==黑桃
    > pkp$ds[pkp$pm=="3" & pkp$hs=="黑桃"]<-500 > pkp

    pkp$pm=="3" & pkp$hs=="黑桃"

     练习题

    pkp<-data.frame(pm=rep(c("A",2:10,"J","Q","K"),times=4),
                    hs=rep(c("红桃","黑桃","梅花","方块"),each=13),
                    ds=rep(1:13,times=4),
                    stringsAsFactors = F)
    #pkp$pm=="A"
    
    # 第一题:取出扑克牌中四个A(4行3列)
    pkp[pkp$pm=="A",]

    # 第二题:
    pkp$pm=="A"
    
    sum(pkp$pm=="A")
    # 第三题:
    pkp$hs=="红桃"
    
    pkp[pkp$hs=="红桃",]
    
    # 思考题:
    pkp$pm=="Q"&pkp$hs=="黑桃"
    pkp[pkp$pm=="Q"&pkp$hs=="黑桃",]

    练习:把黑桃和方块里边的J和Q的点数修改为10

    p_1<-pkp$hs %in% c("黑桃","方块")
    p_2
    <-pkp$pm %in% c("J","Q")
    pkp$ds[p_1
    &p_2]<-10

     缺失值

    缺失值的发生:丢失、破坏或者测量并没有发生。
    NA:R中用NA代表不可用(
    not available)。
    默认机制:通常,在R运算或者R函数中,NA会原封不动地保留和传送。
    设置参数na.rm
    =T:将NA移除,然后进行计算。
    is.na:通过逻辑测试定位缺失值的位置。
    > #缺失值
    > is.na(c(3,5,NA))
    [1] FALSE FALSE  TRUE
    > x<-c(3,5,NA)
    > x[!is.na(x)]
    [1] 3 5
    > x[is.na(x)]
    [1] NA
    > is.na(x)
    x<-c(3,5,NA)
    > x==NA
    [1] NA NA NA
    > #识别一个向量里边缺失值的个数
    > sum(is.na(x))
    [1] 1
    > #移除缺失值
    > sum(x,na.rm = T)
    [1] 8
    > #查看数据的统计摘要
    > summary(x)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
        3.0     3.5     4.0     4.0     4.5     5.0       1 
    > 
  • 相关阅读:
    Hello_Area_Description 任务三:Project Tango采集区域描述数据
    智能小车 机器人
    Hello_Depth_Perception 任务二:Project Tango采集深度感知数据
    Project Tango Explorer
    make运行阶段划分
    关于chroot
    xargs命令
    debian配置集锦
    gdb使用技巧
    gdb调试使用autotools工程的项目
  • 原文地址:https://www.cnblogs.com/foremostxl/p/12009372.html
Copyright © 2020-2023  润新知