R中的列表与数据框

1.列表(list)

(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]]

[1] "Mary"

> Lst[[4]][2]

[1] 7

但是,列表不同于向量,我们每次只能引用一个元素,如Lst[[1:2]]的用法是不允许的。

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

定义列表时如果指定了元素的名字(如Lst中的name,wife,no.children,child.ages),则引用列表元素还可以用它的名字作下标,格式为“列表名[[“元素名”]],如:

> Lst[["name"]]

[1] "Fred"

> Lst[["child.ages"]]

[1] 4 7 9

另一种格式是“列表名$元素名”,如:

> Lst$name

[1] "Fred"

> Lst$child.ages

[1] 4 7 9

 

(2)列表的修改

列表的元素可以修改,只要把元素引用赋值即可,并且还可以增加项,删除列表其中某一项,将该项赋空值,如:

> Lst$name<-"John"

> Lst$income<-c(1980,1600)

> Lst$income<-NULL

几个列表可以用连接函数c()连接起来,结果仍为一个列表,其元素为各自变量的列表元素。

 

(3)返回值为列表的函数

在R中,有许多函数的返回值是列表,如求特征值特征向量的函数等。

 

2.数据框(data.frame)

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

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

尽管如此,一般还是可以把数据框看作是一种推广了的矩阵,它可以用矩阵形式显示,可以用对矩阵的下标引用方法来引用其元素或子集。

(1)数据框的生成

数据框可以用data.frame()函数生成,其用法与list()函数相同,各自变量变成数据框的成分,自变量可以命名,称为变量名。如:

>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

     NameSex 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)是与df相同的数据框。

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

> A<-matrix(1:6,c(2,3))

> A

    [,1] [,2] [,3]

[1,]   1    3    5

[2,]   2    4    6

> data.frame(A)

  X1X2 X3

1 1  3  5

 2 4  6

 

(2)数据框的引用

引用数据框元素的方法与引用与矩阵元素的方法相同,可以使用下标或下标向量,可以用名字或名字向量。如:

> df[1:2,3:5]

  AgeHeight 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定义,此属性一定是非空的。数据框的各行也可以定义名字,可以用rownames属性定义。如:

> names(df)

[1] "Name"   "Sex"    "Age"    "Height" "Weight"

>rownames(df)<-c("A","B","C","D","E")

> df

     NameSex Age Height Weight

A  Alice   F  13  56.5   84.0

B  Becka   F  13  65.3   98.0

C  James   M  12  57.3   83.0

D Jeffrey  M  13   62.5  84.0

E   John   M  12  59.0   99.5

 

(3)attach()函数

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

> attach(df)

> r<-Height/Weight

> r

[1] 0.6726190 0.6663265 0.6903614 0.74404760.5929648

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

>df$r<-Height/Weight

为了取消连接,只要用detach()函数(无参数即可)。

 

3.列表与数据框的编辑

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

> xnew<-edit(xold)

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

函数edit()也可以对向量、数组或矩阵类型的数据进行修改或编辑。


参考:《统计建模与R软件》 薛毅 陈立萍 编著 清华大学出版社

你可能感兴趣的:(R中的列表与数据框)