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毫秒