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. 有了这8款Mac安全杀毒和流氓防护软件,让你的mac清理优化,更加安全

    其实Mac系统相对Windows来说更加安全,主要原因是针对Mac系统的病毒和流氓软件并不多,而且Mac系统的安全机制也更加完善,不过为了更加安全的使用Mac,使用以下8款Mac 杀毒安全.安全防护和 ...

  2. Redis分布式锁----悲观锁实现,以秒杀系统为例

    摘要:本文要实现的是一种使用redis来实现分布式锁. 1.分布式锁 分布式锁在是一种用来安全访问分式式机器上变量的安全方案,一般用在全局id生成,秒杀系统,全局变量共享.分布式事务等.一般会有两种实 ...

  3. hadoop 伪分布式搭建

    下载hadoop1.0.4版本,和jdk1.6版本或更高版本:1. 安装JDK,安装目录大家可以自定义,下面是我的安装目录: /usr/jdk1.6.0_22 配置环境变量: [root@hadoop ...

  4. vmware centos7 网络配置

    1. 在vmware创建centos虚拟机 2. 在cmd下看一下本机所处的网段,并对一下vmware上的配置 如果同样处于同一网段(192.168.aaa.bbb,aaa处一致就行),就可以直接开机 ...

  5. u-boot(五)内核启动

    目录 u-boot(五)内核启动 概述 分区空间 内核文件格式 内核复制跳转 内核启动 机器ID 启动参数 (起始tag)setup_start_tag 内存设置 根文件系统,启动程序,串口设备 (结 ...

  6. ansible playbook 变量

    变量优先级 在命令中定义的变量(-e参数指定的) 在inventory中定义的变量(ansible_ssh_user等) 其他变量(role中.play中) 系统通过father_facts定义的变量 ...

  7. oracle数据泵导入导出命令

    1.在PL/SQL的界面,找到Directories文件夹,找到目录文件的路径 2.通过SSH进入服务器 找到相应的路径 cd /u01/oracle/dpdir 输入指令 df -h   查看资源使 ...

  8. 【英文文档】Solidifier for Windows Installation Guide

    Page 1Solidifier for Windows  Installation Guide Page 2McAfee, Inc.McAfee® Solidifier for Windows In ...

  9. 【整理】Linux 下 自己使用的 debug宏 printf

    #ifdef __DEBUG_PRINTF__ /* * * Some Debug printf kit for devlopment * * Date : 2019.03.04 * * Editor ...

  10. javascript的作用域和闭包(三)闭包与模块

    一些很重要的说明:前面三篇博客详细的介绍了,引擎与编译器和作用域的关系,重点需要理解的是编译器中的分词与词法分析,JavaScript的特有的“赋值操作的左右侧”引用操作:编译阶段的词法作用域的工作原 ...