二. 控制流

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,"\n","SD",spread,"\n")
+ } else{
+ cat("Median=",center,"\n","MAD",spread,"\n")
+ }
+ 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\n")
+ )
+ }
>
> 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(可选):聚合函数。

Chapter 05—Advanced data management(Part 2)的更多相关文章

  1. Chapter 05—Advanced data management(Part 1)

    一. R的数学函数,统计函数及字符处理函数 例01:一道实际应用题 一组学生其数学,科学和英语的成绩如下表: 任务:根据成绩,决定对每个学生的单独指导: 前20%的学生的成绩为A,次之为B,以此类推: ...

  2. Chapter 04—Basic Data Management

    1. 创建新的变量 variable<-expression expression:包含一组大量的操作符和函数.常用的算术操作符如下表: 例1:根据已知变量,创建新变量的三种途径 > my ...

  3. MySQL vs. MongoDB: Choosing a Data Management Solution

    原文地址:http://www.javacodegeeks.com/2015/07/mysql-vs-mongodb.html 1. Introduction It would be fair to ...

  4. 场景3 Data Management

    场景3 Data Management 数据管理 性能优化 OLTP OLAP 物化视图 :表的快照 传输表空间 :异构平台的数据迁移 星型转换 :事实表 OLTP : 在线事务处理 1. trans ...

  5. Advanced Data Structures

    Advanced Data Structures Advanced Data Structures

  6. [Windows Azure] Data Management and Business Analytics

    http://www.windowsazure.com/en-us/develop/net/fundamentals/cloud-storage/ Managing and analyzing dat ...

  7. Data Management Technology(1) -- Introduction

    1.Database concepts (1)Data & Information Information Is any kind of event that affects the stat ...

  8. Data Management and Data Management Tools

    Data Management ObjectivesBy the end o this module, you should understand the fundamentals of data m ...

  9. Building Applications with Force.com and VisualForce(Dev401)(十七):Data Management: Data management Tools

    ev401-018:Data Management: Data management ToolsModule Objectives1.List objects exposed in the impor ...

随机推荐

  1. Linux 编译与交叉编译

    在Linux环境中,所处平台不同,执行文件也就不同,同一执行文件不能在不同平台下使用 如在Ubnutu下 是用gcc编译一个.c文件 gcc main.c -o main.out -o 可以指定输出文 ...

  2. SpringBoot整合Redis在可视化工具乱码问题,以及常用的api

     pom依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  3. 【Java必修课】HashMap性能很好?问过我EnumMap没

    1 简介 我们知道Map只是一个接口,它有多种实现,Java中最常用的是HashMap了.而本文想讲述的是另一个实现:EnumMap.它是枚举类型的Map,要求它的Key值都必须是枚举型的. 2 创建 ...

  4. WebGL简易教程(十二):包围球与投影

    目录 1. 概述 2. 实现详解 3. 具体代码 4. 参考 1. 概述 在之前的教程中,都是通过物体的包围盒来设置模型视图投影矩阵(MVP矩阵),来确定物体合适的位置的.但是在很多情况下,使用包围盒 ...

  5. Kong06-Kong 的集群怎么用

    Kong 集群允许您通过添加更多的机器来处理更多的传入请求来横向扩展系统.它们将共享相同的配置,因为它们指向相同的数据库.指向相同数据存储的 Kong 节点将属于相同的 Kong 集群. 您需要在Ko ...

  6. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  7. SP5150 JMFILTER - Junk-Mail Filte(并查集)

    直秒并查集.这题的难点就在于怎么删点.如果要删的是叶节点,那还好,直接刨掉即可 如果是中间节点甚至是根节点,那就不好办了..... solution: 对于独立一个点,我可以用邻接表模拟,然后用并查集 ...

  8. vscode react自动补全html标签

    第一步:点击上图左下角设置,找到Settings,搜索includeLanguages 第二步:如上图点击图中红色区域,settings.json 第三部:把代码加入,如上图红色选择区域. " ...

  9. 最新JetBrains PyCharm 使用教程--常用功能设置(三)

    选择代码路径和Python解释器版本 ​ 设置Pycharm菜单字体的大小 ​ 设置编辑器里面字体大小 ​ 设置文件编码 ​ 设置背景颜色 ​ 设置tab键为4个空格 ​ 设置代码内容和关键字颜色 ​ ...

  10. 删除Linux的依赖库并进入救援模式恢复

    删除Linux的依赖库并进入救援模式恢复 模拟一下依赖库文件被删,并进入救援模式恢复 系统:CentOS7 一.删除mv的依赖库文件 删除/lib64/libc.so.6 [root@centos7 ...