R语言数据结构
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 |
|
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语言数据结构的更多相关文章
- 第二章 R语言数据结构
R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...
- R语言数据结构二
上节我们讲到R语言中的基本数据类型,包括数值型,复数型,字符型,逻辑型以及对应的操作和不同数值类型之间的转换.众所周知,R语言的优势在于进行数据挖掘,大数据处理等方面,因此单个的数据并不能满足我们的需 ...
- R语言-数据结构
1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two&q ...
- R语言数据结构一
R是面向对象的语言,它跟其他编程语言的数据类型差不多,有四种,分别为:数值型,复数型,逻辑性和字符型 数值型:即数字,分为整数型和双精度型.数字可以用科学技术法表示,形式为Xe+m,意为x乘10的m次 ...
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...
- R语言的数据结构
首先声明,R语言对大小写敏感. 一.向量 vector类型可以存储数字.字符和逻辑类型.构建函数为C(): > a <- c(1,2,3,4) > b <- c('dau',' ...
- R语言入门 :基本数据结构
1.向量 向量是R语言中最基本的数据类型,在R语言中没有单独的变量. (1) 创建向量 R语言中可以用 = 或者 <- 来赋值. 向量名 <- 向量 或 向量名 = 向量 向量的创建方 ...
- R语言中数据结构
R语言还是有点古老感觉,数据结构没有Python中那么好用.以下简单总结一下R语言中经常使用的几个数据结构. 向量: R中的向量能够理解为一维的数组,每一个元素的mode必须同样,能够用c(x:y)进 ...
- R语言-六大数据结构
R语言有六种基本的数据结构(或者说数据类型吧).根据数据的维度和同质/异质可分为5种数据类型,最后再介绍一种特殊的类型“因子”. 同质 异质 1维 原子向量 列表 2维 矩阵 数据框 n维 数组 ...
随机推荐
- 红黑树LLRB
LLRB——红黑树的现代实现 一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉 ...
- 使用WCF扩展在方法调用前初始化环境
使用WCF扩展在方法调用前初始化环境 OperationInvoker 介绍 OperationInvoker 是 WCF 运行时模型中在调用最终用户代码前的最后一个扩展点,OperationInvo ...
- DES加密解密 与 Cookie的封装(C#与js互相加密解密)
2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密) 这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方 ...
- jquery animate stop函数解析
今天我们来看看jquery中动画操作的stop函数.其实我至今不是很明白啊,所以此文算是求救以及抛砖引玉. 在jquery 1.7版本以前,stop支持两个参数,分别是clearQueue和jumpT ...
- Java笔记:与系统交互、系统相关的类,Object类
1.程序与用户交互 (1)运行一个Java程序的时候要给它提供一个main方法入口,这边分析一下这个main方法的签名public static void main(String[] args);pu ...
- VC 编程ANSI环境下读写Unicode文件
没有注意到文件编码的不同会产生这么多的问题,在动手以前查询了很多资料,在本博客中收藏了不少先辈的成果,在这里一并表示致敬! 关于ANSI和Unicode编码的原理在这里也不说了,主要讲下如 ...
- python tornado nginx deployment tornado 的部署在linux Nginx服务器
题外话: 这里分享一个链接是将Flask 和 Apache 用 mod_wsgi 来进行传唤的部署方式,在digital ocean VPS 上的. https://www.digitalocean. ...
- [修]python普通继承方式和super继承方式
[转]python普通继承方式和super继承方式 原文出自:http://www.360doc.com/content/13/0306/15/9934052_269664772.shtml 原文的错 ...
- Android应用中使用AsyncHttpClient来异步网络数据
首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测试的Ac ...
- qt的安装及连接sql使用注意
qt安装与使用 今天写下qt使用的注意事项,qt-project.org上已经更新了qt5的相关库,但是建议不是很熟系qt的朋友,或者说想使用传统qt api而不是qml的朋友, 继续下载老版本4.8 ...