2.6 列表与数据框

2.6.1 列表

1.列表的构造

列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,不同元素不必是同一类型,元素本身允许是其他复杂数据类型,比如,列表的一个元素也允许是列表

> Lst<-list(name="Fred",wife="Mary",no.children=3,child.ages=c(4,7,9));Lst
$name
[1] "Fred" $wife
[1] "Mary" $no.children
[1] 3 $child.ages
[1] 4 7 9 > Lst[2]
$wife
[1] "Mary" > Lst[[2]]
[1] "Mary"
> Lst[4][2]
$<NA>
NULL
> Lst[[4]][2]
[1] 7
> Lst[[1:2]]
Error in Lst[[1:2]] : 下标出界

注意,“列表名[下标]"或"列表名[下标范围]"的用法是合法的,但其意义与用两重括号的记法完全不同,两重记号取出列表的一个元素,结果与该元素类型相同,如果使用一重括号,则结果是列表的一个子列表,结果类型仍为列表

> Lst[["name"]]
[1] "Fred"
> Lst[["child.ages"]]
[1] 4 7 9
> Lst$name
[1] "Fred"
> Lst$wife
[1] "Mary"
> Lst$child.ages
[1] 4 7 9

构造列表的一般格式为

Lst<-list(name_1=object_1,...,name_m=object_m)

其中name是列表元素的名称,object是列表元素的对象

2.列表的修改

> Lst$name<-"John"
> Lst$income<-c(1980,1600)
> Lst
$name
[1] "John" $wife
[1] "Mary" $no.children
[1] 3 $child.ages
[1] 4 7 9 $income
[1] 1980 1600

2.6.2 数据框

数据框是R的一种数据结构,它通常是矩阵形式的数据,但矩阵各列可以是不同类型的,数据框每列是一个变量,每行是一个观测

数据框有更一般的定义,他是一种特殊的列表对象,有一个值为“data.frame”的class属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩、列表,或其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同的长度

1.数据框的生成

> df<-data.frame(Name=c("Alice","Becka","James","Jeffrey","John"),
+ Sex=c("F","F","M","M","M"),
+ Age=c(13,13,12,13,12),
+ Height=c(56.5,65.3,57.3,62.5,59.0),
+ Weight=c(84.0,98.0,83.0,84.0,99.5));df
Name Sex Age Height Weight
1 Alice F 13 56.5 84.0
2 Becka F 13 65.3 98.0
3 James M 12 57.3 83.0
4 Jeffrey M 13 62.5 84.0
5 John M 12 59.0 99.5

如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框

> Lst<-list(Name=c("Alice","Becka","James","Jeffrey","John"),
+ Sex=c("F","F","M","M","M"),
+ Age=c(13,13,12,13,12),
+ Height=c(56.5,65.3,57.3,62.5,59.0),
+ Weight=c(84.0,98.0,83.0,84.0,99.5));Lst
$Name
[1] "Alice" "Becka" "James" "Jeffrey" "John" $Sex
[1] "F" "F" "M" "M" "M" $Age
[1] 13 13 12 13 12 $Height
[1] 56.5 65.3 57.3 62.5 59.0 $Weight
[1] 84.0 98.0 83.0 84.0 99.5 > as.data.frame(Lst)
Name Sex Age Height Weight
1 Alice F 13 56.5 84.0
2 Becka F 13 65.3 98.0
3 James M 12 57.3 83.0
4 Jeffrey M 13 62.5 84.0
5 John M 12 59.0 99.5

一个矩阵可以用data.frame()转化为一个数据框,如果它原来有列名则其列名被作为数据框的变量名;否则系统自动为各矩阵的各列起一个变量名

> X<-array(1:6,c(2,3))
> data.frame(X)
X1 X2 X3
1 1 3 5
2 2 4 6

2.数据框的引用

> df[1:2,3:5]
Age Height Weight
1 13 56.5 84
2 13 65.3 98
> df[["Height"]]
[1] 56.5 65.3 57.3 62.5 59.0
> df$Weight
[1] 84.0 98.0 83.0 84.0 99.5
> names(df)
[1] "Name" "Sex" "Age" "Height" "Weight"
> rownames(df)
[1] "1" "2" "3" "4" "5"
> rownames(df)<-c("one","two","three","four","five");df
Name Sex Age Height Weight
one Alice F 13 56.5 84.0
two Becka F 13 65.3 98.0
three James M 12 57.3 83.0
four Jeffrey M 13 62.5 84.0
five John M 12 59.0 99.5

3.attach()函数

数据框的主要用途是保存统计建模的数据,R的统计建模功能都需要以数据框为输入数据。我们可以把数据框当成一种矩阵来处理。在使用数据框的变量 时可以用“数据框名$变量名”的记法。但是,这样使用较麻烦,R提供了attach()函数可以把数据框众的变量链接到内存中,这样便于数据框数据的调用

> r<-Height/Weight
错误: 找不到对象'Height'
> attach(df)
> r<-Height/Weight;r
[1] 0.6726190 0.6663265 0.6903614 0.7440476 0.5929648

后一语句将在当前工作空间建立一个新的变量r,它不会自动进入数据框df中,要把新变量赋值到数据框中,可以用

> df$r<-Height/Weight;df
Name Sex Age Height Weight r
one Alice F 13 56.5 84.0 0.6726190
two Becka F 13 65.3 98.0 0.6663265
three James M 12 57.3 83.0 0.6903614
four Jeffrey M 13 62.5 84.0 0.7440476
five John M 12 59.0 99.5 0.5929648

为了取消连接,只要调用detach()

注:R中名字空间的管理是比较独特的,它在运行时保持一个变量搜索路径表,在读取某个变量时到这个变量搜索路径表中由前向后查找,找到最前的一个;在赋值时总是在位置1赋值(除非特别指定在其它位置赋值)。attach()的缺省位置是在变量搜索路径表的位置2,detach()缺省也是去掉位置2,所以,R编程的一个常见问题是当你误用了一个自己并没有赋值的变量时有可能不出错,因为这个变量已在搜索路径中某个位置有定义,这样不利用程序的调试

2.6.3 列表与数据框的编辑

如果需要对列表或数据框中的数据进行编辑,也可以调用函数edit()进行编辑、修改,其命令格式为

xnew<-edit(xold)

其中xold是原列表或数据框,xnew是修改后的列表或数据框,注意:原数据xold并没有改动,改动的数据存放在xnew中

统计分析与R软件-chapter2-6的更多相关文章

  1. 统计分析与R软件-chapter2-5

    2.5 多维数组和矩阵 2.5.1 生成数组或矩阵 数组有一个特征属性叫做维数向量(dim属性),维数向量是一个元素取正整数的向量,其长度是数组的维数,比如维数向量有两个元素时数组为2维数组(矩阵). ...

  2. 统计分析与R软件-chapter2-3

    2.3 对象和它的模式与属性 R是一种基于对象的语言,R的对象包含了若干个元素作为其数据,另外还可以有一些特殊数据称为属性,并规定了一些特定操作(如打印.绘图).比如,一个向量是一个对象,一个图形也是 ...

  3. 统计分析与R软件-chapter2-4

    2.4 因子 统计中的变量有几中重要类别:区间变量.名义变量和有序变量.区间变量取连续的数值,可以进行求和.平均值等运算.名义变量和有序变量取离散值,可以用数值代表,也可以是字符型值,其具体数值没有加 ...

  4. 统计分析与R软件-chapter2-2

    2.2 数字.字符与向量 2.2.1 向量 1.向量的赋值 x<-c(10.4,5.6,3.1,6.4,21.7) 2.向量的运算 x<-c(-1,0,2);y<-c(3,8,2) ...

  5. R软件导入数据_r语言怎么导入数据_R软件导入数据

    R软件导入数据_r语言怎么导入数据_R软件导入数据 R软件导入数据 1.Rcmdr安装包导入数据: 1.安装Rcmdr包,输入: install.packages("Rcmdr") ...

  6. R统计建模与R软件

    教材目录 第一章 概率统计的基本知识 第二章 R软件的使用 第三章 数据描述性分析 第四章 参数估计 第五章 假设检验 第六章 回归分析 第七章 方差分析 第八章 应用多元分析(I) 第九章 应用多元 ...

  7. R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲

    这两天,由于要做一个文本分析的内容,所以搜索了一天R语言中的可以做文本分析的加载包,但是在安装包的过程,真是被虐千百遍,总是安装不成功.特此专门写一篇博文,把整个心塞史畅快的释放一下. ------- ...

  8. Fragstats:使用R软件读取frag78b.asc文件

    Fragstats中,有一个用于熟悉Fragstats软件的demon,在tutorial中的1种,有reg78b.asc文件,其文件内容是包含了山歌图像的行数和列数以及分辨率大小等基本信息. 采用R ...

  9. R语言入门学习笔记 - 对R软件的认识

    一.R软件 1.安装R:自行百度☺ 2.R控制台(R Console)和R程序脚本: 打开R软件,就会直接打开控制台,控制台可以显示程序运行的结果.错误提示等信息,也可以直接输入想要执行的操作并立即返 ...

随机推荐

  1. springboot定时任务处理

    定时任务是一种很常见的应用场景,springboot中的定时任务完全用的spring的那一套,用起来比较简单,需要注意的是线程池配置的那一块 使用 @EnableScheduling 注解就可以开启定 ...

  2. 16、计算1加到100用两个定义值count=1、sum=0

    #!/user/bin/python# -*- coding:utf-8 -*-count = 1sum = 0while count <= 100: sum = sum + count cou ...

  3. Elastic Stack之Logstash进阶

    Elastic Stack之Logstash进阶 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用GeoLite2和logstash 过滤插件的geoip案例 1>. ...

  4. Centos 6\7下yum安装R

    在linux下安装软件不如windows方便,在windows下我们一般针对可安装的文件(如R.exe)直接双击运行就可以了.而在linux下我们首先要学会使用安装软件的专门工具如centos下的rp ...

  5. eclipse+tomcat+maven+springmvc+mybatis+mysql集成WebService插件(Axis2+CXF)

    $1 环境介绍 $1.1 Eclipse Java EE IDE for Web Developers:Neon.2 Release (4.6.2) $1.2 Maven:3.3.9 $1.3 Spr ...

  6. xml实体注入学习

    好久没学习技术了  很多东西都忘了  复习一下 测试代码 <?php $xml = file_get_contents("php://input"); $data = sim ...

  7. I/O exception (java.net.SocketException) caught when processing request: Connect

    Exception [一个故障引发的话题] 最近,项目中的短信模块收到一个故障日志,要求我协助调查一下: 2010-05-07 09:22:07,221 [?:?] INFO  httpclient. ...

  8. jsp实现验证码登陆

    login.jsp: <%@ page language="java" import="java.util.*,com.cn.servlet.*" pag ...

  9. 一些优秀的Python包

    总结一下我使用到的一些比较优秀的Python package =========================通用包========================= Werkzeug itsdan ...

  10. springboot(十三):springboot结合mybatis generator逆向工程自动生成代码

    错信息generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver 上网查了一下,发现原来是generator这个插件在运 ...