5. 数据结构

5.1 数据结构简介

(1)向量

一个向量的所有元素必须有相同的类型(模式)

(2)列表

列表可以非同质的

列表可按位置索引:lst[[2]]

抽取子列表:lst[c(2,5)]

列表可以有名称:lst[[“Moe”]]或者lst$Moe

列表类似于字典、散列表等

(3)模式:实体类型

> mode(3.1415)

R中每个对象都有一个模式,表明该对象如何存储在存储器中:

对象

例子

模式

Number

3.14

numeric

Vector of numbers

c(2.7, 3.14)

numeric

Character string

“Moe”

character

Vector of Character string

c(“Moe”, “Larry”)

character

Factor

factor(c(“NY”,”CA”,”IL”))

numeric

List

list(“Moe”,”Larry”)

list

Data frame

data.frame(x=1:3, y=c(“NY”,”CA”,”IL”))

list

Function

print

function

(4)类:抽象类型

> d <—as.Date(“2010-03-10”)

> class(d)             //结果是“Date”

R中每个对象有一个定义它们抽象类型的类(class)

(5)纯量(常量)

又叫做拥有唯一元素的向量

(6)矩阵

R中矩阵只是有维数的向量

向量的维数,初始值为NULL

> A <—1:6

> dim(A)<— c(2,3)           //成为2*3的矩阵

(7)数组(array)

矩阵只是二维的向量,数组可以是多维的向量

(8)因子(factor)

R记录向量中的唯一值,每一个唯一值称为相关联因子的水平,参照5.5

因子两个关键应用:分类变量、分组

(9)数据框

旨在模拟数据集,与SAS或SPSS中数据集

5.2 对向量添加数据

> v <—c(1,2,3)

> v <—c(v, 4)             //把4加入原向量为:1,2,3,4

> w <—c(5,6,7,8)

> v <—c(v,w)             //将v和w合并

5.3 在向量中插入数据

> append(vec,newvalues, after=n)              //在vec中的第n个元素后面插入newvalues

5.4 理解循环规则

当较短的向量处理完所有元素,而较长的向量仍有未处理元素,较短向量返回到开始位置循环各元素

5.5 构建因子

因子由各分类变量组成,每个分类变量的可能值称为一个水平

> f <—factor(v)

5.6 创建列表

> lst <—list(0.5,0.8,0.3)

> lst <—list(mid=0.5, right=0.8, left=0.3)

> lst[[2]]

>lst[[“mid”]]       或lst[“mid”]              或lst$mid

5.7 从列表中移除元素

> lst[[“mid”]]<— NULL           //移除mid元素

5.8 将列表转换为向量

> v <—unlist(lst)

5.9 从列表中移除取值为NULL的元素

> lst[sapply(lst,is.null)] <— NULL

5.10 使用条件来移除列表元素

> lst[lst< 0] <— NULL                     //移除小于0的元素

>lst[is.na(lst)] <— NULL          //移除值为NA的元素

> lst[abs(unlist(lst))< 1]

5.11 矩阵初始化

> mat <—matrix(vec, 2, 3)            //从vec数据生成一个2*3的矩阵

> dim(vec)<— c(2,3)                      //方法2

5.12 矩阵运算

> t(A)                   //矩阵A的转置

> solve(A)            //矩阵A的求逆

> A %*% B           //矩阵A*B

> diag(n)              //生成一个n阶对角单位矩阵

5.13 将描述性名称赋给矩阵的行和列

> rownames(mat)<— c(“rowname_1”, “rowname_2”, …, “rowname_n”)

> colnames(mat)<— c(“colname_1”, “colname_2”, …, “colname_n”)

5.14 从矩阵中选定一行或一列

> vec <—mat[1,]                     //结果是一个向量

> vec <—mat[,2 ,drop=FALSE]                     //结果是一个矩阵

5.15 用列数据初始化数据框

> dfrm <—data.frame(v1, v2, v3, f1, f2)            //用向量和因子初始化数据框

> lst <—list(v1, v2, v3)

> dfrm <—as.data.frame(lst)                             //方法2

5.16 用行数据初始化数据框

当每行的数据是由数字、字符等不同模式数据混合时,不能用向量存储数据。一般将每一行存储在一个单行数据框中,然后组成一个列表,调用函数rbind和do.call把多行结合成一个大数据框。

> obs <—list(data.frame(vc1=1, f1=0), data.frame(vc1=2, f1=1))

> dfrm <—rbind(obs[[1]], obs[[2]])                    //将前两行组成一个数据框

> dfrm <—do.call(rbind, obs)                      //将所有行组成一个数据框

当obs不是数据框的列表,而是列表的列表,先调用Map函数将行数据转换成数据框数据,然后再用do.call

> dfrm <—do.call(rbind, Map(as.data.frame, obs))

5.17 添加行至数据框

新行得是单行数据框模式的。

> suburbs<— rbind(suburbs,

+                   data.frame(city=”Nanjing”,county=”Kane”, pop=5421)

+                   data.frame(city=”Beijing”,county=”Jane”, pop=5552))    //同时加两行

5.18 预分配数据框

当数据量很大时候,逐个添加新行构建数据框时,R的内存管理器会不良运转。如果知道必须的行数,可以预先分配空间。

> N <—100000

> dfrm <—data.frame(colname1=numeric(N), colname2=character(N), …)

5.19选中数据框的列

> dfrm[[n]]                        //返回第n列,一个向量

> dfrm[n]                           //返回一个数据框,里面只有第n列

>dfrm[c(n1,n2,n4)]          //

> dfrm[,n]                          //返回一个向量

>dfrm[,c(n1,n3)]              //

> dfrm[[“name”]]             > dfrm$name             //返回列名为name的列

> subset(dfrm,select=c(colname1, colname2))  //按列名选取列

>subset(dfrm, select=c(colname1, colname2), subset=(colname1>0))              //满足条件的行,以及只要两列

5.20 修改数据框的列名

> colnames(dfrm)<— c(“before”, “treatment”, “after”)

5.21 编辑数据框

> temp <—edit(dfrm)

> dfrm <—temp                      //将修改后的数据框存为temp

> fix(dfrm)                                //直接修改后覆盖原数据框

5.22 从数据框中移除包含NA的行

> clean_dfrm<— na.omit(dfrm)

5.23 从数据框中移除列

> subset(dfrm,select = -colname2)

5.24 合并两个数据框

当两个数据框的列不一致时,合并是横向的,用cbind:

> all.cols <—cbind(dfrm1, dfrm2)        //横向列合并

当两个数据框的列一致时,合并是纵向的,用rbind:

> all.rows <—rbind(dfrm1, dfrm2)              //纵向行合并

根据共有列合并数据框,类似SQL的join,用merge:

> m <—merge(dfrm1, dfrm2, by=”name”)

5.25 更便捷地访问数据框内容

当用数据框中的列时,本来需要dfrm$colname1,可以用如下命令省去dfrm:

> with(dfrm,expr)            //当前表达式expr中可以直接用colname1

>attach(dfrm)                  //下面的表达式中都可以用colname1

5.26 基本数据类型间的转换

>as.character(x)        //字符型

>as.complex(x)          //复数型

>as.numeric(x)          or           as.double(x)

>as.integer(x)

>as.logical(x)

5.27 不同结构化数据类型间的转换

有些转换是不可行的,要注意。

>as.data.frame(x)

> as.list(x)

>as.matrix(x)

> as.vector(x)

 
 

R语言数据结构的更多相关文章

  1. 第二章 R语言数据结构

    R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...

  2. R语言数据结构二

    上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需 ...

  3. R语言-数据结构

    1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two&q ...

  4. R语言数据结构一

    R是面向对象的语言,它跟其他编程语言的数据类型差不多,有四种,分别为:数值型,复数型,逻辑性和字符型 数值型:即数字,分为整数型和双精度型.数字可以用科学技术法表示,形式为Xe+m,意为x乘10的m次 ...

  5. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  6. R语言的数据结构

    首先声明,R语言对大小写敏感. 一.向量 vector类型可以存储数字.字符和逻辑类型.构建函数为C(): > a <- c(1,2,3,4) > b <- c('dau',' ...

  7. R语言入门 :基本数据结构

    1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1)  创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或  向量名 = 向量 向量的创建方 ...

  8. R语言中数据结构

    R语言还是有点古老感觉,数据结构没有Python中那么好用.以下简单总结一下R语言中经常使用的几个数据结构. 向量: R中的向量能够理解为一维的数组,每一个元素的mode必须同样,能够用c(x:y)进 ...

  9. R语言-六大数据结构

    R语言有六种基本的数据结构(或者说数据类型吧).根据数据的维度和同质/异质可分为5种数据类型,最后再介绍一种特殊的类型“因子”.   同质 异质 1维 原子向量 列表 2维 矩阵 数据框 n维 数组 ...

随机推荐

  1. IOS7学习之路二(处理ios6到ios7后UITableView的两个显示问题)

    1.在ios6开发的项目,当用ios7的虚拟机显示的时候会出现UINavigationItem遮挡TableView的问题: 下面是对比显示效果: 我的处理方法是: 在UITableViewContr ...

  2. C# 操作 Excel 常见问题收集和整理

    C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流) 经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个 ...

  3. Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)

    最近因为各种原因,装过不少次Caffe,安装过程很多坑,为节省新手的时间,特此总结整个安装流程. 关于Ubuntu 版本的选择,建议用14.04这个比较稳定的版本,但是千万不要用麒麟版!!!比原版体验 ...

  4. 对C# 构造函数的理解

    C#构造函数是在创建给定类型的对象时执行的类方法. 构造函数具有与类相同的名称,它通常初始化新对象的数据成员.不带参数的构造函数称为“默认构造函数”. 无论何时,只要使用 new 运算符实例化对象,并 ...

  5. IOS开发小记-内存管理

    关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...

  6. Hadoop 实现多文件输出

    比如word.txt内容如下: aaa bbb aba abc bba bbd bbbc cc ccd cce 要求按单词的首字母区分单词并分文件输出 代码如下: LineRecordWriter p ...

  7. [置顶] Oracle学习经验谈

    经常遇到朋友问oracle学习难不难,怎么才能成为高手等等,我想结合我的个人经验简单说几点: 1.打好基础,由浅入深 学习Oracle不能急于求成,寄希望于一天成为一个大侠.学习有个过程,应该由浅入深 ...

  8. 保护模式特权级别DPL,RPL,CPL 之间的联系和区别

    RPL是段选择子里面的bit 0和bit 1位组合所得的值,但这里要首先搞清楚什么是段选择子,根据Intel 的文件(IA-32 IntelR Architecture Software Develo ...

  9. [ios2]蓝牙通信【转】

    iPhone开发应用中关于GameKit蓝牙实例讲解是本文要介绍的内容,主要是来了解并学习GameKit蓝牙实例.介绍一下这个实例实现的是两个带有蓝牙设备的touch之间的一个小游戏,在界面上有个可以 ...

  10. SpringAOP导致@Autowired依赖注入失败

    之前用springAOP做了个操作日志记录,这次在往其他类上使用的时候,service一直注入失败,找了网上好多内容,发现大家都有类似的情况出现,但是又和自己的情况不太符合.后来总结自己的情况发现:方 ...