• Chapter 05—Advanced data management(Part 2)


    二. 控制流

    statement:一个单独的R语句或者是一个复合的R语句;

    cond:条件表达式,为TRUE或FALSE;

    expr:数字或字符表达式;

    seq:数字或字符串的顺序。

    1.循环语句:for,while

    (1)for(var in seq)  statement

    for(i in 1:10)
    + print("Hello R")
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"
    [1] "Hello R"

    (2) while(cond)  statement

    > i<-10
    > while(i>0) {print("Hello");i<-i-1}
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"
    [1] "Hello"

    2. 条件语句:if-else, ifelse, switch

    (1) if-else

    if(cond) statement

    if(cond) statement1 else statement2

    > grade<-"wang shen wen"
    > grade
    [1] "wang shen wen"
    > if(is.character(grade))  grade<-as.factor(grade)
    > grade
    [1] wang shen wen
    Levels: wang shen wen
    > if(!is.factor(grade)) 
    +    grade<-as.factor(grade)   else
    +    print("Grade already is a factor")
    [1] "Grade already is a factor"

    (2)ifelse

    ifelse(cond,statement1,statement2)

    ·如果cond为TRUE,则执行ststement1;若cond为FALSE,则执行statement2.

    score<-0.3
    > ifelse(score>0.5,print("Passed"),print("Failed"))
    [1] "Failed"
    [1] "Failed"
    > 
    > outcome<-ifelse(score>0.5,"passed","failed") > outcome [1] "failed"

    print("Failed"):会打印两次Failed,因为第一次是Failed这个短语,第二次是print()函数自身。

    (3)switch

    switch(expr,...)

    feelings<-c("sad","afraid")
    > for(i in feelings)
    +    print(
    +         switch(i,
    +               happy="I am gald you are happy",
    +               afraid="There is nothing to fear",
    +               sad="Cheer up",
    +               angry="Calm down now"
    +               )
    +          )
    [1] "Cheer up"
    [1] "There is nothing to fear"

    三. 用户自定义函数(user-written functions)

    myfunction<-function(arg1,arg2,...){

         statements

         return(object)

    }

    例10:

     定义一个函数mystat,选择参数(parameter),即平均值(mean)和方差(standard deviation);

                                   或选择非参数(nonparametric),即中位数(median)和绝对中位差(median absolute deviation)。

    > mystat<-function(x,parametric=TRUE,print=FALSE){
    +   if(parametric){
    +      center<-mean(x); spread<-sd(x)
    +   } else{
    +      center<-median(x); spread<-mad(x)
    +   }
    +   if(print&parametric){
    +      cat("Mean=",center,"
    ","SD",spread,"
    ")
    +    } else{
    +       cat("Median=",center,"
    ","MAD",spread,"
    ")
    +    }
    +    result<-list(center=center,spread=spread)
    +    return(result)
    + }
    > 
    > set.seed(1234) > x<-rnorm(500) >
    > y<-mystat(x) Median= 0.0018 MAD 1 > y<-mystat(x,parametric=FALSE,print=TRUE) Median= -0.021 MAD 1

    例11:让用户选择输出日期的格式。

    mydate<-function(type="long"){
    +    switch(type,
    +           long = format(Sys.time(),"%A %B %d %Y"),
    +           short = format(Sys.time(),"%m-%d-%y"),
    +           cat(type,"is not a recognized type
    ")
    +           )
    + }
    > 
    > mydate("long") [1] "星期四 八月 01 2013" > mydate("short") [1] "08-01-13" > mydate("medium") medium is not a recognized type

     四. 聚合(aggregation)和重组(restructuring)

    1. 反置(transpose)

     使用t()函数反置一个矩阵或一个数据集,即行列的变量交换。

    例12:

    > cars<-mtcars[1:5,1:4]
    > cars
                      mpg cyl disp  hp
    Mazda RX4          21   6  160 110
    Mazda RX4 Wag      21   6  160 110
    Datsun 710         23   4  108  93
    Hornet 4 Drive     21   6  258 110
    Hornet Sportabout  19   8  360 175
    > t(cars)
         Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
    mpg         21            21         23             21                19
    cyl          6             6          4              6                 8
    disp       160           160        108            258               360
    hp         110           110         93            110               175

     2. 聚合(aggregating)

     aggregate(x,by,FUN)

        ·x:初始数据集;

        ·by:创建新观测值(observations)的变量表(lists of variables);

        ·FUN:使用新的观测值来,计算总的统计数据值。

     例13:

    options(digits=3)
    > attach(mtcars)
    > aggdata<-aggregate(mtcars,by=list(cyl,gear),FUN=mean,na.rm=TRUE)
    > aggdata
      Group.1 Group.2  mpg cyl disp  hp drat   wt qsec  vs   am gear carb
    1       4       3 21.5   4  120  97 3.70 2.46 20.0 1.0 0.00    3 1.00
    2       6       3 19.8   6  242 108 2.92 3.34 19.8 1.0 0.00    3 1.00
    3       8       3 15.1   8  358 194 3.12 4.10 17.1 0.0 0.00    3 3.08
    4       4       4 26.9   4  103  76 4.11 2.38 19.6 1.0 0.75    4 1.50
    5       6       4 19.8   6  164 116 3.91 3.09 17.7 0.5 0.50    4 4.00
    6       4       5 28.2   4  108 102 4.10 1.83 16.8 0.5 1.00    5 2.00
    7       6       5 19.7   6  145 175 3.62 2.77 15.5 0.0 1.00    5 6.00
    8       8       5 15.4   8  326 300 3.88 3.37 14.6 0.0 1.00    5 6.00

     3. reshape包

     在数据集的重构和聚合方面,reshape包是非常有用的。但是需要先安装,再使用,因为不是R中的基础包。

    install.packages("reshape")

    (1)“melt” data:是每一行是一个特别的ID变量组合(a unique ID-variable combination).

    melt()函数:对一个数据集(dataset),把该数据集重构成另一种形式,每一个测量过的变量(measured variables)在其自身那行中,都有一个ID变量特别的指示着该变量。

    例14:

    > library(reshape)
    载入需要的程辑包:plyr
    
    载入程辑包:‘reshape’
    
    下列对象被屏蔽了from ‘package:plyr’:
    
        rename, round_any
    
    > md<-melt(mydata,id=(c("id","time")))
    Error: id variables not found in data: id, time
    > id<-c(1,1,2,2)
    > time<-c(1,2,1,2)
    > x1<-c(5,3,6,2)
    > x2<-c(6,5,1,4)
    > 
    > mydata<-data.frame(id,time,x1,x2) > md<-melt(mydata,id=(c("id","time"))) > md id time variable value 1 1 1 x1 5 2 1 2 x1 3 3 2 1 x1 6 4 2 2 x1 2 5 1 1 x2 6 6 1 2 x2 5 7 2 1 x2 1 8 2 2 x2 4

    (2)“cast” the melted data:使之成为想要的形状。在cast过程中,使用函数对数据进行聚合。

     cast()函数:处理melted 的数据时使用,使用一个公式(formula),提供一个可选的函数(function),去聚合函数。

    newdata<-cast(md,formula,FUN)

        ·md:melted data;

        ·formula:描述期待的最终结果;

                       其形式为:rowvar1+rowvar2+...+colvar1+colvar2+...

                       rowvar1+rowvar2+...定义决定行的变量的集合;

                       colvar1+colvar2+...定义决定列的变量的集合。                              

        ·FUN(可选):聚合函数。

  • 相关阅读:
    关联规则挖掘算法综述
    Python中*args 和**kwargs的用法
    VIM python 自动补全插件:pydiction
    Java设计模式--工厂模式
    Java设计模式--单列设计模式
    Java设计模式--UML类图类的关系(依赖,泛化, 实现,关联,聚合,组合)
    Java设计模式--设计模式七大原则
    SpringBoot 整合篇 笔记--Spring Boot与监管/热部署
    SpringBoot 整合篇 笔记--Spring Boot与分布式
    SpringBoot 整合篇 笔记--Spring Boot与任务/安全
  • 原文地址:https://www.cnblogs.com/wangshenwen/p/3229727.html
Copyright © 2020-2023  润新知