一、数据集

数据集的概念

数据集是由数据组成的矩阵数组,<font color=#ea4335 红色 size=3>行表示观测(observation),列表示变量(variable)

数据类型

  1. 数值型变量

    PatientID、AdmData、Age 为数值型变量
  2. 字符型变量

    Diabetes、Status则为字符型变量
  3. 逻辑型变量
  4. 复数型变量
  5. 原生型(字节)

另外,PatientID 是实例标识符,AdmData 含有日期数据

Diabetes 和 Status 则为字符型变量,并且分别为名义型有序型变量

R 将实例标识符称为rownames,将类别型(包括名义型与有序型)变量称为因子

二、数据结构

1. 向量

向量是用于储存数值型字符型逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量

a<-c(1,2,3,4,5,6,7)

注意,单个向量中数据必须是一样的数据类型;标量是只有一个元素的向量,例如 f<- 3、g<-"US"

<font color=#ea4335 红色 size=3>通过在方括号中给定元素所处位置的数值,可以访问向量中的元素,即方括号内是元素的索引

2. 矩阵

矩阵是一个二维数组,即能储存两个维度的向量,其中每个元素的坐标是有两个的。但需要注意的是,其中每个元素都拥有相同的模式,一般通过函数matrix()来创建矩阵。一般的格式为:

mymatrix <- matrix(vector, nrow= number_of_rows, ncol= number_of_columns,
+ byrow = logical_value,
+ dinames= list(char_vector_rownames, char_vector_colnames))

其中,vector 即为包含了矩阵中元素的向量,nrow & ncol 是指定了行数和列数,一个房子的建成,除了框架搭好,砖头砌上的方式也有讲究,byrow 则告诉 R 是以行的顺序添加元素,还是以列的顺序添加。dinames 则告诉了每行每列的名称。

可以使用下标和中括号来选择矩阵中的行、列或元素。X[i,]指定了矩阵 X 中的第 i 行等等。

3. 数组

数组(array)类似于矩阵,但是它的维度可以大于 2。数组可以依如下格式创建:

myarray <- array(vector, dimensions, dinames)

dimensions 指定了每个维度下标的最大值

从数组中选取元素的方式也是依靠中括号

4. 数据框

数据框的限制相对较小,每一列的数据模式均可不同,可通过data.frame()创建

mydata<- data.frame(col1, col2, col3)

注意,这里的col1, col2, col3 会直接被当做列名,若要修改列名可用函数names()来修改,如:

names(mydata)[1] <-"k"

这样就可以将第一列的列名修改为“k”了

选取数据框中的特定元素

通过美元符号$ 来选取一个数据框内的特点变量如mydata$a

没个变量名前都要输入数据框的名称可能会有些繁琐,但也清楚的表示了是哪个数据集中的变量点明了归属。如果想省去这一步,可以利用下列几个函数

attach(),detach(), with()

实例标识符(case identifier)

可以在 data.frame()中,rowname 中指定哪个列为实例

5. 因子

变量有以下几种类型

  1. 名义型

    如"type1"等等
  2. 有序型

    如“first”等等,内在有先后顺序的关系
  3. 连续型

    年龄 “Age”

而类别(名义型)变量和有序变量在 R 中称为因子

函数factor()存储类别值以一个整数向量的形式,整数的取值范围是[1...k](注意 k 是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。

举一个例子

diabetes <- c("type1", "type2", "type1","type1")

语句diabetes <- factor(diabetes) 将向量储存为(1, 2, 1, 1),并在内部将其关联为 1 = type1, 2= type2 等。(根据字母顺序而定)。 并且在后续分析中,会将其作为名义型变量对待


而有序型变量的表示仅需在 factor()函数中,指定参数ordered = TRUE 即可

但是由于因子的水平,即序列的先后顺序是依据字母的先后顺序,所以默认的排序可能不是我们想要的。这时候我们可以使用参数levels选项来覆盖默认排序

status <- factor(status, ordered = TRUE, levels = c("Poor","Improved","Excellent"))

这时候,levels 的参数相当于直接将向量 c 投影在向量c(1,2,3)上,各水平的赋值为,1 = Poor, 2 = Improved, 3 = Excellent。需要注意的是,保证 levels 中指定的水平需要与数据中的真实值相匹配,若在数据中出现了参数中未出现的数据都将设为缺失值

如果,在数据中,例如男性女性性别这一列,数据被以 1、2 编码,则可以利用以下语句将变量转换为一个无序因子

sex <- factor(sex, levels = c(1,2), labels = c("Male", "Female"))

这个例子中,参数 levels 的作用是给标签定位的,各水平相当于按顺序赋值给 Male 和 Female

6. 列表

列表是最复杂的一种数据结构,某个列表可以是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用list()函数创建列表:

mylist <- list(name1 = object1, name2 = object2)

访问列表的方式与以上几种不太一样,在这里通过双重方括号中指明代表某个成分的数字或名称来访问列表中的元素

mylist <- list(title = g, ages = h, j, k)
#以下两种访问方式输出结果一致
mylist[[2]]
mylist[["ages"]]

三、数据的输入

最为简单的一种可视化输入方法即用fix()函数,直接用键盘来输入数据

当然比较常用的一个输入数据的函数是read.table()

里面涉及到比较多的参数,下面一一列举并说明

1. header

表示文件的第一行时候包含了变量名的逻辑型变量

2. sep

分开数据值的分隔符,默认是 sep="" 表示了一个或多个空格、制表符、换行、或回车,当然也有 sep="\t",使用制表符来分割行内数据

3. row.names

用于指定一个或多个行标记符,将其作为实例标识符,以区分行内数据是不同的个体

4. col.names

如果第一行不包含变量,可以用它指定一个包含变量名的字符向量,即给每一列添加变量名,如果它们都被省略的,R 自动给他们命名 V1、V2...

5. na.strings

用于表示缺失值的字符向量,特点将某些值转换成 NA

6. colClasses

可选的,将每一列的变量分配为特定的类别,比如 colClasses = c("numeric", "numeric", "character"), 如果数据多于三列,则 colClasses 的值会循环

7. quote

对有特殊字符的字符串划定界限的字符串

8. skip

需要跳过的的数目

9. stringsAsFactors

标记处字符向量是否转化为因子,默认为 TRUE,可以被 colClasses 覆盖,处理大型数据时,将之设置为 FALSE 可以提升速度

10. text

指定文字设置处理的字符串

四、数据集的标注

对于变量,我们希望能有个更详细的标注去描述它。一种解决办法是,将变量标签作为变量名,然后通过位置下标来访问

names(patientdata)[2] <- "Age at hospitalization(in years)"
patientdata[2]

值标签

factor()函数可以为类别型变量创建值标签

levels 为变量的实际值,而 labels 表示包含了理想值标签的字符型变量

R语言学习笔记(2)——数据结构与数据集的更多相关文章

  1. R语言学习笔记︱Echarts与R的可视化包——地区地图

    笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...

  2. R语言学习笔记:基础知识

    1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

  3. R语言学习笔记1——R语言中的基本对象

    R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...

  4. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  5. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  6. R语言学习笔记(二)

    今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...

  7. R语言学习笔记(一)

    1.不同的行业对数据集(即表格)的行和列称谓不同,统计学家称其为观测(observation)和变量(variable): 2.R语言存储数据的结构: ①向量:类似于C语言里的一位数组,执行组合功能的 ...

  8. R语言学习笔记:小试R环境

    买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

  9. R语言学习笔记:使用reshape2包实现整合与重构

    R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...

  10. R语言学习笔记—决策树分类

    一.简介 决策树分类算法(decision tree)通过树状结构对具有某特征属性的样本进行分类.其典型算法包括ID3算法.C4.5算法.C5.0算法.CART算法等.每一个决策树包括根节点(root ...

随机推荐

  1. 前端开发之VSCode扩展

    1.Chinese (Simplified) Language Pack for Visual Studio Code——中文语言包 2.Beautify——代码格式化工具 3.HTML Snippe ...

  2. Angular开发规范

    目录  一.         前言 1.1.       规范目的 1.2.       局限性 二.         文件规范 2.1.       文件结构约定 2.2.       单一职责原则 ...

  3. JavaScript中继承的实现方法--详解

    最近看<JavaScript王者归来>中关于实现继承的方法,做了一些小总结: JavaScript中要实现继承,其实就是实现三层含义:1.子类的实例可以共享父类的方法:2.子类可以覆盖父类 ...

  4. ElasticSearch(三):通分词器(Analyzer)进行分词(Analysis)

    ElasticSearch(三):通过分词器(Analyzer)进行分词(Analysis) 学习课程链接<Elasticsearch核心技术与实战> Analysis与Analyzer ...

  5. CSP-S 94 (sb lsc gc赛)

    不要问我为什么题解倒着写,因为在填坑! 关于这场比赛就是我sb的再现 考完试旁边_LH叱的一声说道:“lsc真**垃圾”; lsc:........确实很垃圾! ------------------- ...

  6. JavaScript闭包使用姿势指南

    目录 JavaScript闭包使用姿势指南 引言 闭包的定义 来个有趣的例子吧 现在我们换个例子吧 我们再来个有趣的例子 内存泄露问题 用闭包解决递归调用问题 用闭包模拟私有方法 在循环中使用闭包 性 ...

  7. suseoj 1208: 排列问题 (STL, next_permutation(A.begin(), A.end()))

    1208: 排列问题 时间限制: 1 Sec  内存限制: 128 MB提交: 2  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 全排列的生成就是对于给定的字符集或 ...

  8. libwebsocket协议切换状态机

    libwebsocket为连接(connection)定义了一组状态机-lws_connection_states,通过状态机我们来看libwebsocket如何实现协议的切换.除了lws_conne ...

  9. mybatis精讲(三)--标签及TypeHandler使用

    目录 话引 XML配置标签 概览 properties 子标签property resource 程序注入 settings 别名 TypeHandler 自定义TypeHandler EnumTyp ...

  10. 对js中局部变量、全局变量和闭包的理解

    对js中局部变量.全局变量和闭包的理解 局部变量 对于局部变量,js给出的定义是这样的:在 JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域 ...