Chapter 02—Creating a dataset(Part1)
一. 数据集
1. 在R语言中,进行数据分析的第一步是创建一个包含待研究数据并且符合要求的数据集。
· 选择装数据的数据结构
· 把数据装入数据结构中
2. 理解数据集
(1)数据集通常是矩形的数据列表,有行和列。
对于数据集中行列两个量,有许多不同的叫法:
· 统计学家:observations & variables
· 数据库分析师:records & fields
· 数据挖掘/机器学习领域:examples & attributes
(2)R拥有广泛的装数据的结构:标量/向量/数据帧/表。
(3)R可以处理的数据类型:数值型/字符型/布尔型(真,假)/复合型/字节型。
二. 数据结构
3. 理解数据结构
(1)不同的数据结构的区别在于:怎么创建(how they're created);
能装什么类型的数据(the kind of data they can hold);
结构的复杂性(structural complexity);
用于识别的符号(the notation used to identify);
访问单个元素(access to individual elements)。
(2)下图02-01是R的各种数据结构:
图02-01 R Data Structures
4. 对象(object):可以分配给变量的任何东西,如常量,函数,数据结构,甚至是图。
对象(object)=模式(mode)+类(class)
·模式(mode):描述一个对象怎么创建;
·类(class):告诉一个类函数怎么处理。
5. 向量(vector)
(1)向量是一维数组,可以装数字型数据(numeric data),字符型数据(character data),逻辑型数据(logical data)。
注意:一个向量有且仅有一种类型的数据(numerical,character,logical)或模式。
(2)联合函数(combine function) c():是用来组织向量的。
例02-01:给向量赋值
(3)标量(scalar)是仅有一个元素的向量(one-element vector),并且c是一个逻辑向量。
例02-02:给向量赋单值
注意:"h<-"这个符号后面可以有空格也可以没有空格去接“-3”这个值。
(4)使用代表位置的数值组成的向量来表示向量的一个或几个元素。
例02-03:取向量中的元素
注意:向量的第一个元素的位置值是1。
6. 矩阵(Matrices)
(1)矩阵是一个二维的阵列,并且每一个元素都是相同的类型(数值,字符或者是逻辑值)。
(2)用matrix函数来创建矩阵。
myymatrix<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rownames,char_vector_colnames))
·vector:包含矩阵的元素;
·nrow,ncol:指定矩阵的行列维数;
·dimnames(可选项):行,列名字的特征矩阵;
·byrow(可选项):指示这个矩阵是按行(byrow=TRUE)或按列(byrow=FALSE)填入。
缺省值是FALSE,表示按列填入。
例02-04:创建矩阵
·byrow的值缺省为FALSE,即按列赋值;
·dimnames的值缺省,则无行列标签。
例02-05:创建矩阵
·创建了一个2×2的矩阵,先给矩阵按行赋值,再给矩阵按列赋值。
·矩阵的行名称为:R1,R2;列名称为C1,C2。
例02-06:创建矩阵
·二维矩阵,在确定矩阵的总元素个数后,可以仅仅确定的给出行数或列数。
例02-07:使用矩阵下标
·X[i,]:表示矩阵X第i行的元素;
·X[,j]:表示矩阵X第j列的元素;
·X[i,j]:表示矩阵X第i行第j列的元素。
·下标i,j可以是表示行/列的数值或数值向量。
7. 数组(Arrays)
(1)数组与矩阵类似,但是可以有二维或多维。
(2)用array这个函数来创建数组。
myarray<-array(vector,dimensions,dimnames)
·vector:包含数组的所有元素;
·dimensions:是一个数值向量,给定每一维的最大下标,即每一位能包含的最多元素个数;
·dimnames(可选项):每一维的名字的列表。
注意:
1)在大于二维时,dimnames的第一二个变量表示行列的名称。
2)array函数中,没有byrow这个变量,即在一个数组的分量矩阵中,不存在是按行还是按列赋值。
图02-02
3)数组中的每一个元素都是相同的类型。
4)从下面的例子来看,在array函数的分量矩阵中,是按列赋值的。
例02-08:创建数组
例02-09:创建数组
8. 数据帧(Data frames)
(1)每一列有且仅有一种类型的数据,不同的列可以是不同类型的数据。
(2)使用data.frame函数创建数据帧:
mydata<-data.frame(col1,col2,col3,...)
·col1,col2,col3,...可以是任何类型的列向量。
(3)names函数:表示每一列的名字。
例02-10:创建数据帧
例02-11:指定数据帧中的元素
·$:数据帧$变量,如:patientdata$age:指代在数据帧patientdata中的变量age指代的所有元素。
· 以数据帧patientdata中的diabetes的内容作为行名称,status的内容作为列名称,创建一个二维矩阵;
以各类型元素在各种状态下的个数作为该矩阵的值。
(4)attach()函数:添加数据帧到R语言的某个搜索路径;当遇到一个变量时,则检查这个搜索路径中的数据帧,以便能定位这个变量。
detach()函数:把一个数据帧从搜索路径中移除。
注意:detach()函数对于数据帧本身而言,什么都没有做;并且是可选的,但是对于好的编程风格是有必要加上的。
例02-12:attach()函数与detach()函数
等价于:
注意:attach()和detach()函数最好是适用于分析一个数据帧,并且同一个名字仅有对象。
(5)with()函数:避免对象被掩盖的警告。
例02-13:with()函数的使用
·{ }里面声明的内容如:summary(mpg,disp,wt),plot(mpg,disp),plot(mpg,wt),都认为使用了mtcars这种数据帧。
·如果只有一个声明(statement),则{ }可用可不用。
A)with()函数的赋值仅仅在函数内部有效:
B)想要创建在with()函数外面仍然有效的变量,使用赋值符号"<<-",而非赋值符号"<-"。
(6)case identifiers
仍以前面的例子patientdata为例子,patientID用于在数据集中标识每个个体。
在R语言中case identifiers可以由数据帧函数中的一个rowname的可选项标识。
例02-14:case identifiers
9. 因子(Factors)
(1)变量的类型
·名义变量(nominal variables):绝对的,没有隐含次序的(categorical,without an implied order);
·次序变量(ordinal variables):有隐含次序,但数值不隐藏(implied order,but not amount);
·连续变量(continuous variables):次序和数值都隐藏(both order and amount are implied)。
·因子(factors):名义变量+次序变量。{nominal(categorical) &ordinal(ordered) variables}
·因子在R语言中非常重要,因为其决定数据被如何分析,怎样呈现。
(2)factor()函数:把名义变量对应的绝对数值存储在一个内部向量中。
例02-15:使用factor()函数
·缺省order这个量,则status中的元素的等级按照字母顺序而递增排列;
·存在order这个量,.............................................................;
·要使status中元素等级不按照字母顺序排列,则令order=TRUE,并用可选项levels()函数,实例化期待的排列顺序。
例02-16:使用factor()函数
10. 表(Lists)
(1)表是R语言中,最复杂的数据结构。
· 最基本的,表是objects的有序结合。
· 一个表允许你在一个名字下聚集一系列的(不相关的)objects。
(2)List是R语言中很重要的数据类型,有以下两个原因:
·用简单的方法处理完全相异的信息;
·使得R的很多函数都可以返回list类型的数据。
(3)使用list()函数来创建一个list:
mylist<-list(object1,object2,...)
或 mylist<-list(name1=object1,name2=object2,...)
·object 可以是任意的结构类型
例02-17:创建一个表
·该例子中,一个list有4种成分:一个字符串,一个数值型向量,一个矩阵,以及一个字符型向量。
总结:
· 变量的值不是被声明的,而是来自于第一次被赋值;
· R语言中没有标量值,通常用一个元素的向量来表示标量;
· A$x:表示数据帧A中的变量x;
· R语言中没有多行注释或者是块注释,只能在每行的开头用#符号表示该行为注释;
· 在测试时,可以用if(FALSE){...}使得一段某段代码不被执行;用if(TRUE){...}使得一段代码被执行。
· 给一个向量,数组,矩阵或表中不存在的元素赋值,将会扩大其结构,以容纳新的值。
例02-18:给向量赋其本来不存在的值,使其扩展
例02-19:使扩展后的向量收缩
· R语言从1开始计数,而非0.
例02-20:
·本小结:
介绍两个主要概念:对象(object)和因子(factor);
介绍五种数据类型:向量(vector),数组(array),矩阵(matrix),数据集(data.frame),表(list);
在数据集中,顺便引进了三个函数 attach()和detach(),以及with()函数;
在引入因子(factor)的变量时,定义了三个概念:名义变量(nominal variables),次序变量(ordinal variables),连续变量(continuous variables)。
向量,数组,矩阵中的每一个对象都必须是相同的类型的数据;
数据集的每一列的对象必须是相同的类型的数据,不同列可以是不同类型的数据;
表的每一个对象都可以是不同类型的数据。
Chapter 02—Creating a dataset(Part1)的更多相关文章
- Chapter 02—Creating a dataset(Part2)
三. 导入数据 图02-03:Source of data that can be imported into a dataset 11. 从键盘导入数据 (1)可能是最简单的数据导入方式. (2)使 ...
- Chapter 02—Creating a dataset(Part3-补充材料Stat/Transfer)
Stat/Transfer:在电子表格(worksheet),数据库(database),统计包(statistical package)间进行数据转换,具有简单高效的特点. 资料来源于:http:/ ...
- advanced dom scripting dynamic web design techniques Chapter 2 CREATING YOUR OWN REUSABLE OBJECTS
JavaScript is all about objects. Objects are the foundation of everything, so if you’re unfamiliar w ...
- MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables
之前 manipulate 表里的数据,现在则是 manipulate 表本身. INDEX 创建多列构成的主键 自动增长的规定 查看上一次插入的自增 id 尽量用默认值替代 NULL 外键不可以跨引 ...
- java1234教程系列笔记 S1 Java SE chapter 02 写乘法口诀表
一.水仙花数 1.方式一:这是我的思路,取各个位数的方式.我个人习惯于使用取模运算. public static List<Integer> dealNarcissiticNumberMe ...
- java1234教程系列笔记 S1 Java SE chapter 02 lesson 03 java基本数据类型
第二章 第三节 数据类型 3.1 分类 基本数据类型.引用类型 3.2整型 byte 8 short 16 int 32 long 64 作业: A:1-10求和 B:float double 的最 ...
- Chapter 02:复合 VS 继承
复合优先于继承,继承是实现代码重用的有力手段,并不是所有情况都适用,使用不当会导致软件变得很脆弱.与方法调用不同的是,继承打破了封装性. 总而言之,组合和继承,都能实现对类的扩展.但是要分具体情况用哪 ...
- Chapter 02 - Let's Get Started(C#篇)
详细解释,书上有哈.直接上代码和结果. Xcode下的自定义类 (通过new file-> cocoa class创建,保持和书中名字一样RandomController),自定义的fields ...
- Client Dataset Basics
文章出处: http://www.informit.com/articles/article.aspx?p=24094 In the preceding two chapters, I discus ...
随机推荐
- Web for pentester_writeup之LDAP attacks篇
Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...
- 题解和总结——noip2019集训测试赛(一)贪吃蛇+字符串+都城
Problem A: 贪吃蛇 描述 Input Output Sample Input [样例输入1] 4 5 ##... ..1#@ 432#. ...#. [样例输出1] 4 [样例输入2] 4 ...
- 学习笔记12JS异步请求
*一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS ...
- 学习笔记50_mongodb
MongoVUE,MongoDB可视化客户端: 添加一个连接: 数据库下就是集合. 实际上是json数据的集合 Mongodb->数据库->文档集合:相当于表->文档:相当于表里面的 ...
- 发布兼容TS的JS库到nexus和npmjs
一. 前言 由于node以及绝大多数前端库都是用JavaScript(以下简称JS)语言实现,而Angular是用TypeScript(以下简称TS)实现,虽然TS是JS的超集,但是由于TS和JS对于 ...
- Numpy 中的聚合操作
# 导包 import numpy as np sum np.random.seed(10) L = np.random.random(100) sum(L) np.sum(L) min np.min ...
- MySQL8.0 redo日志系统优化
背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复.redo日志是物理日志,一般采用WAL(Write-Ahead-Loggin ...
- [UWP]使用SpringAnimation创建有趣的动画
1. 什么是自然动画 最近用弹簧动画(SpringAnimation)做了两个番茄钟,关于弹簧动画官方文档已经介绍得够详细了,这篇文章就摘录一些官方文档核心内容. 在传统UI中,关键帧动画(KeyFr ...
- P3105 [USACO14OPEN]公平的摄影(正解是乱搞,我却二分了)(+二分答案总结)
照例化简题意: 给定一个01区间,可以把0改成1,问其中最长的01数量相等的区间长度. 额很容易想到前缀和,把w弄成1,h弄成-1,然后求前缀和,然后乱搞就行了. 但是一直不太会乱搞的我却直接想到了二 ...
- Redis集群--Redis集群之哨兵模式
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 搭建R ...