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. python中字符编码及unicode和utf-8区别

    ascii和unicode是字符集,utf-8是编码集 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为字节序列的规则(编码/ ...

  2. 信用评分卡 (part 1 of 7)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  3. python 模块一(random,counter,defaultdict,time,wraps,reduce) 栈 队列 双向队列

    ####################总结####################### 模块:你写的py文件 引用其他模块 1.import 模块 2.from 模块 import 功能,类,变量 ...

  4. java版微信公众号支付(H5调微信内置API)

    最近需要做微信公众号支付,网上找了大堆的代码,大多都只说了个原理,自己踩了太多坑,所有的坑,都会再下面的文章中标注,代码我也贴上最全的(叫我雷锋)!!! 第一步:配置支付授权目录 你需要有将你公司的微 ...

  5. Git(创建与合并分支)

    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而 ...

  6. HTML第四耍 超链接标签

    1.HTML 超链接(链接) 一.HTML 超链接 HTML中使用超级链接与网络上的另一个文档相连.几乎可以在所有的网页中找到链接.点击链接可以从一张页面跳转到另一张页面. 超链接可以是一个字,一个词 ...

  7. springboot(十九):SpringBoot+EHcache实现缓存

    https://blog.csdn.net/qq_28143647/article/details/79789368

  8. nmap学习之nmap -sP 【目标】

    一.通过arp包判断局域网内的主机状态 二.对于局域网外的主机通过向主机 1)发送普通ICMP请求包[类型字段为8,代码字段为0]: 2)发送时间戳ICMP请求包[类型字段为13,代码字段为0]: 3 ...

  9. 【51nod 1191】消灭兔子

    Description 有N只兔子,每只有一个血量B[i],需要用箭杀死免子.有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 <= i <= M).假设 ...

  10. PHP中使用jQuery+Ajax实现分页查询多功能操作

    1.首先做主页面Ajax_pag.php 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UT ...