Matlab 版 (精华区)
发信人: zjliu (秋天的萝卜), 信区: Matlab
标 题: 6. 数据框
发信站: 哈工大紫丁香 (Sat Apr 24 13:39:09 2004), 站内信件
数据框(data.frame)
数据框是S中类似SAS数据集的一种数据结构。它通常是矩阵形式的数据,但矩阵各列可
以是不同类型的。数据框每列是一个变量,每行是一个观测。
但是,数据框有更一般的定义。它是一种特殊的列表对象,有一个值为“data.frame”
的class 属性,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩
阵、列表,或其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型
则会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数
、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同
的长度(行数)。
尽管如此,我们一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显
示,可以用对矩阵的下标引用方法来引用其元素或子集。
数据框生成
数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框
的成分,自变量可以命名,成为变量名。例如:
> d <- data.frame(name=c("李明", "张聪", "王建"), age=c(30, 35, 28),
+ height=c(180, 162, 175))
> d
name age height
1 李明 30 180
2 张聪 35 162
3 王建 28 175
如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转
换为数据框。比如,上面的d如果先用list()函数定义成了一个列表,就可以强制为一个
数据框。
一个矩阵可以用data.frame()转换为一个数据框,如果它原来有列名则其列名被作为数
据框的变量名,否则系统自动为矩阵的各列起一个变量名(如X1,X2)。
数据框引用
引用数据框元素的方法与引用矩阵元素的方法相同,可以使用下标或下标向量,也可以
使用名字或名字向量。如d[1:2, 2:3]。数据框的各变量也可以用按列表引用(即用双括
号[[]] 或$符号引用)。
数据框的变量名由属性names定义,此属性一定是非空的。数据框的各行也可以定义名字
,可以用rownames属性定义。如:
> names(d)
[1] "name" "age" "height"
> rownames(d)
[1] "1" "2" "3"
attach()函数
数据框的主要用途是保存统计建模需要的数据。S的统计建模功能都需要以数据框为输入
数据。我们也可以把数据框当成一种矩阵来处理。
在使用数据框的变量时可以用“数据框名$变量名”的记法。但是,这样使用较麻烦,S
提供了attach()函数可以把数据框“连接”入当前的名字空间。例如,
> attach(d)
> r <- height / age
后一语句将在当前工作空间建立一个新变量r,它不会自动进入数据框d,要把新变量赋
值到数据框中,可以用
> d$r <- height / age
> d$r <- height / age
这样的格式。
为了取消连接,只要调用detach()(无参数即可)。
注意:S和R中名字空间的管理是比较独特的。它在运行时保持一个变量搜索路径表,在
读取某个变量时到这个变量搜索路径表中由前向后查找,找到最前的一个;在赋值时总
是在位置1赋值(除非特别指定在其它位置赋值)。attach()的缺省位置是在变量搜索路
径表的位置2 ,detach()缺省也是去掉位置2。所以,S编程的一个常见问题是当你误用
了一个自己并没有赋值的变量时有可能不出错,因为这个变量已在搜索路径中某个位置
有定义,这样不利于程序的调试,需要留心这样的问题。
除了可以连接数据框,也可以连接列表。
--
╔═══════════════════╗
║★★★★★友谊第一 比赛第二★★★★★║
╚═══════════════════╝
※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 202.118.229.162]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.482毫秒