R中数据结构

进行任何数据分析的第一步:创建包含研究信息的数据集。

在R中这个步骤包括以下两步:

1. 选择一种数据结构来存储数据;

2. 将数据输入或导入到这个数据结构中。

一、 数据集

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量

下图是一个假想的病例数据集:

R中的数据结构包括:标量、向量、矩阵、数组、数据框和列表。

上图实际为R中的一个数据框。

R可以处理的数据类型包括:数值类型、字符型、逻辑性(TRUE/FALSE)、复数型(虚数)和原生型(字节)。

上图中 前三列为数值型变量。后两列为字符型变量。

R将实例标识符成为rownames(行名),将类别型(包括名义型和有序型)变量成为因子(factors)。

另外上图中,你需要分别告诉R:PatientID是行/实例标识符;AdmDate是日期型变量;Age是连续型变量;Diabetes是名义型变量;Status是有序型变量。

二、 数据结构

R中的数据结构的示意图如下,他们在存储数据的类型、创建方式、结构复杂的,以及用于定位和访问其中个别元素的标记等方面有不同。

声明一些定义:

对象:指可以赋值给变量的任何事物,包括常量、数据结构、函数甚至图形。

模式:对象都拥有某种模式,描述了此对象是如何存储的。

类:对象拥有某个类,像Print这样的泛型函数表明如何处理此对象。

R Studio注释/取消注释的快捷键是: Ctrl + Shift + C.

运行程序快捷键:Command + 回车 (mac)

1. 向量

定义:向量用于存储数值型、字符型或逻辑型数据的一维数组

创建方式:用函数c()来创建。

eg:  a <- (1, 2, 3, -5, 6)  数值型向量

  b <- ("one", "two", "three")  字符型向量

  c <- (TRUE, TRUE, FALSE, TRUE, FALSE)  逻辑型向量

标量是只含一个元素的向量。 eg:  f <- 3、 g <- "US"、 h <- TRUE,他们用于保存常亮。

访问元素:通过在方括号中给定元素所处位置的数值。

eg:  a[c(2, 4)] 表示访问向量a中的第二个和第四个元素。

  a[2:6] 表示访问a中第二个到第六个元素。

相当于用冒号生成一个数值序列。例如 a <- c(2:6) 等加入 a <- c(2, 3, 4, 5, 6)。 2:6表示数字2-6.

2. 矩阵

定义:矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。即仅能包含一种数据类型。

     当维度超过2时,不妨使用数组;当有多种模式的数据时,可以使用数据框。

创建方式:用函数matrix()来创建。

一般使用格式:(可对照下图实例进行理解)

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_column,

          byrow=logical_value, dimnames=list(

          char_vector_rownames, char_vector_colnames))

其中vector包含了矩阵的元素,nrow和ncol指行和列的维数,

dimnames包含了可选的、以字符型向量表示的行名和列名。

选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认按列填充。

eg:

访问元素:可以使用下标和方括号来选择矩阵中的行、列或元素。

X[i, ]指矩阵X中的第i行; X[, j]指第j列; X[i, j]指第i行第j个元素。

选择多行或多列时,下标i和j可为数值型向量。

3. 数组

数组和矩阵类似,但维度可以大于2.

创建形式:myarray <- array(vector, dimensions, dimnames)

vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames是可选的、各维度名称标签的列表。

数组中的数据也只能拥有一种模式。

从数组中选取元素的方式和矩阵相同: eg. myarray[1,2,3]

下边代码创建了一个三维(2x3x4)数值型数组的示例。直接贴代码和结果吧。结合一起看,会特别直观了。

4. 数据框

定义:不同的列可以包含不同模式(数值型、字符型等)的数据。是最常用的一种数据结构。

创建方式:mydata <- data.frame(col1, col2, col3, ...)  每一列的名称可由函数names指定。

每一列数据的模式必须唯一。

选取数据框中元素的方式,可以用下标,也可指定列名

选取数据框中的某个特定变量,用符号 $,eg. 数据框名字$列名

想生成糖尿病类型变量disbetes和病情变量status的列联表用如下代码:

我们可以对照上边patientdata数据框数据,来理解这个联表的意思。其实就是对diabetes和status两列做了个统计。还是挺方便的。

但是每次都需要输入数据框名字和$符号可能会比较麻烦,我们可以使用函数attach()和detach()或者单独使用with()来简化代码。

函数attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框。

函数detach()将数据框从搜索路径中移除。detach()并不会对数据框本身做任何处理。

但当名称相同的对象不止一个时,这个方法就会出现异常了。

譬如,在数据框patientdata被绑定(attach)之前,我们的环境中已经有了一个名为age的对象,这种情况下,原始对象将取得优先权。所有attach()和detach()最好在我们分析一个单独的数据框并且不太可能有多个同名对象时使用。一定要注意那么被屏蔽(masked)的警告。

除此之外,另一种方式是使用函数with()。花括号{}之间的语句都是针对patientdata执行,这样就无需担心重名了。如果仅有一条语句,花括号可以省略

但是函数with()的局限在于,赋值仅在此函数的括号内生效。

如果想外部也可以访问,使用特殊赋值符 <<- 代替 标准赋值符 <-,他可将对象保存到with()之外的全局变量中。

 5. 因子

先说一下变量的分类:名义型变量、有序型变量和连续型变量。

名义型变量是没有顺序的类别变量。eg 糖尿病类型 Diabetes(Tpe1, Type2)。即便Type1 Type2分别编码为1和2,这也并不意味着是有序的。

有序型变量表示一种顺序关系。而非数量关系。eg 病情 Status(poor、improved、excellent)

连续型变量可以表示为某个范围内的任意值,并同时表示顺序和数量。eg 年龄Age

说回来:名义型变量(类别)和有序型变量在R中成为因子(factor)。

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

下边 factor(diabetes)将向量存储为(1, 2 , 1 , 1),并在内部关联为1=Type1和2=Type2。

要表示有序型变量,需要为函数factor()指定参数ordered=TRUE.

因子的排序是依照字母顺序创建的。但这样往往不能符合我们心意。比如下边,Poor应该是排在最末位的。

我们可以通过指定levels选项来覆盖默认排序:

如果指定的水平和数据中的真实值不匹配,那么在数据中出现而未在参数中列出的数据都将被设为缺失值。

数值型变量可以用levels和labels参数来编码成因子。

把变量转换成一个无序因子。标签的顺序必须和水平相一致。在下边例子中,性别被当成类别型变量。用字符串代替数字在结果中的输出,而且所有不是1或者2的性别的变量都将被设置为缺失值。

其实关于因子写了这么多,我顶多懂了百分之五十。下边贴个大例子。

首先以向量的形式输入数据,然后将diabetes和status指定为普通因子和一个有序型因子。最后将数据合并为一个数据框。

函数str(object)可提供R中某个对象的信息。他清楚的显示diabetes是一个因子,而status是一个有序因子。

summary()会区别对待各个变量。他显示了连续型变量age的最小值、最大值、均值和各四分位数,并显示了类别型变量diabetes和status(各水平)的频数值。

:(终于写完这个因子了。抄书一样的觉得哪句话都有用。大部分还是没懂。

6. 列表

列表list是R的数据类型中最为复杂的一种。列表就是一些对象的有序集合。其中对象可以包括若干向量、、矩阵、数据框甚至其他列表组合。

可以使用函数list()创建列表:

mylist <- list(object1, object2, ...)

你还可以为列表中的对象命名:

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

原来list是以逗号分隔为一个元素的。 title=g, ages=h, 只是命名了某一个对象。

访问列表中的元素的三种写法:

R的下标从1开始!!

这一小节终于看完了。

时间: 2024-11-02 15:19:34

R中数据结构的相关文章

R语言中数据结构

R语言还是有点古老感觉,数据结构没有Python中那么好用,下面简单总结一下R语言中常用的几个数据结构. 向量: R中的向量可以理解为一维的数组,每个元素的mode必须相同,可以用c(x:y)进行创建,如x <- c(1:9). 矩阵: R中的矩阵可以理解为二维数组,每一个元素必须要有相同的mode,使用matrix进行创建,matrix的形式为: matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_

R语言编程艺术(2)R中的数据结构

本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ========================================================================= R语言最基本的数据类型就是向量(vector),单个数值和矩阵都是向量的一种特例. 声明:R中不需要声明变量,但是注意函数式语言的特性,如果读写向量中的元素时,R事先不知道对象是向量的话,则函数没有执行的对象.如下代码是无法工作的: y[1]

R语言基础知识学习(一):R中的数据类型和数据结构

R中数据类型有:数值型,字符型,逻辑型和复数型等. R 中存储数据的结构有:向量,数组,因子,数据框,矩阵和列表等. 向量是用于存储数值型.字符型或逻辑型数据的一维数组. 用函数c()可以来创建一个向量,如: > a <- c(1,2,3,4)> b <- c('china','america','japan')> c <- c(TRUE,FALSE,TRUE,FALSE)> ls()[1] "a" "b" "c&

R的数据结构

R的数据结构 R语言 两种常用的数据结构示例(R version 3.2.2): Vertor 向量 c函数语法:c(data1, data2,data3, ...) > c(1,2,3,4,5,6) [1] 1 2 3 4 5 6 # 开始的[1]代表随后输出的1在向量中的位置是第1位 > c(TRUE,FALSE) # 逻辑型变量注意是大写TRUE和FALSE [1] TRUE FALSE > c("a","b","c")

R语言-数据结构

1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two","three") c <- c("TRUE","FALSE") 2.矩阵 矩阵是一个二维数组,只是每个元素都拥有相同的模式,用函数matrix()创建矩阵 y <- matrix(1:20, nrow = 5, ncol = 4

在R中整理数据

原始数据一般分散杂乱,并含有缺失和错误值,因此在进行数据分析前首先要对数据进行整理. 一.首先,了解原始数据的结构. 可使用如下函数(归属baseR)来查看数据结构: class(dataobject)  查看数据对象的类别 dim(dataobject)  查看数据的维度 names(dataobject)  查看列名 str(dataobject) 查看数据概要 glimpse(dataobject) 查看数据概要 二.将数据变得整洁 可使用下列函数(归属package: tidyr)整理数

R中读取EXCEL 数据的方法

最近初学R语言,在R语言读入EXCEL数据格式文件的问题上遇到了困难,经过在网上搜索解决了这一问题,下面归纳几种方法,供大家分享: 第一:R中读取excel文件中的数据的路径: 假定在您的电脑有一个excel文件,原始的文件路径是:D:\work\data\1 如果直接把这个路径拷贝到R中,就会出现错误,原因是: \是escape character(转义符),\\才是真正的\字符,或者用/ 因此,在R中有两种方法读取该路径: 1:在R中输入一下路径:D:\\work\\data\\1     

【转】R中有关数据挖掘的包

下面列出了可用于数据挖掘的R包和函数的集合.其中一些不是专门为了数据挖掘而开发,但数据挖掘过程中这些包能帮我们不少忙,所以也包含进来. 1.聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pam, pamk, clara 基于层次的方法: hclust, pvclust, agnes, diana 基于模型的方法: mclust 基于密度的方法: dbscan 基于画图的方法: plotcluster, plot.hclust 基于验证的

R中按组数据分析

如下的一组数据: age group 1 23.0883 1 2 25.8344 1 3 29.4648 1 4 32.7858 2 5 33.6372 1 6 34.9350 1 7 35.2115 2 8 35.2115 2 9 35.2115 2 10 36.7803 1 如果想要对两组数据分别进行均值和求和,最简单的想法是按类做分组的子矩阵,但是太麻烦. 如果要得到下面的结果:group mean sd 1 34.5 5.6 2 32.3 4.2 ...今天学到的方法是:plyr包中的d