其他

R语言实战专题 | 数据结构之数据框篇

2017-08-23 生信控



文:庐州月光 | 编辑:湖心

本文系原创转载需授权


R语言实战专题 | 数据结构之数据框篇

数据框(data.frame)是R语言中最常见的数据类型。在工作中,通过excel保存和处理数据,相信大家都不会陌生。数据框中保存的数据和excel 文件类似。 在R语言中,有很多内置的数据集,大部分都是通过data.frame这种数据结构进行存储。
> data(mtcars) > class(mtcars) [1] "data.frame" > head(mtcars)                   mpg cyl disp  hp drat    wt  qsec vs am gear carb Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

class函数的结果,我们可以看出mtcars是一个数据框类型的对象。head函数用来查看数据框的前几行内容,可以看到数据框是一个二维的数据结构,有对应的行名称和列名称,由行和列确定一个数据的具体位置。


01

数据框的属性

在向量和列表的章节中,都出现了lengthnames两个属性,当然数据框也有对应的这两个属性,只不过由于其是二维的结构,对应的属性名称有所不同。

和length属性对应的是维度:

> dim(mtcars) [1] 32 11 > nrow(mtcars) [1] 32 > ncol(mtcars) [1] 11

dim函数返回数据框的维度,其实就是对应的行数和列数,nrowncol分别返回行数和列数。

和names属性对应的是行名称和列名称:

> rownames(mtcars) [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"             [7] "Duster 360"          "Merc 240D"           "Merc 230"           [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"       [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"       [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       [31] "Maserati Bora"       "Volvo 142E"         > colnames(mtcars) [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" [11] "carb"

rownamescolnames分别返回数据框的行名称和列名称。


02

数据框中元素的访问

通过下标进行访问,需要同时提供行和列对应的下标

> mtcars[1:2, 1:2]              mpg cyl Mazda RX4      21   6 Mazda RX4 Wag  21   6

逗号之前的是行对应的下标,逗号之后的是列对应的下标。如果想要选取全部的行或者列,可以不用加任何下标。

> head(mtcars[, 1:2])                   mpg cyl Mazda RX4         21.0   6 Mazda RX4 Wag     21.0   6 Datsun 710        22.8   4 Hornet 4 Drive    21.4   6 Hornet Sportabout 18.7   8 Valiant           18.1   6 > head(mtcars[1:2, ])              mpg cyl disp  hp drat    wt  qsec vs am gear carb Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4 Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4

数据框的每一列是一个向量,所以数据框可以看作由列向量组成的列表。列表中元素的访问方式对于数据框同样适用。

通过列名称和列对应的下标进行访问

> mtcars$mpg [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 [29] 15.8 19.7 15.0 21.4 > mtcars[[1]] [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 [29] 15.8 19.7 15.0 21.4


03

数据框的创建

通过data.frame函数创建数据框

> data <- data.frame(A = 1:3, B = c("x1", "x2", "x3"), row.names=c("R1", "R2", "R3")) > data   A  B R1 1 x1 R2 2 x2 R3 3 x3

AB代表数据框中的列向量,row.names代表数据框的行名称。

通过read.table函数创建

R语言的主要用途之一就是数据处理,外部数据通过read.table函数读取进入R语言中,采用data.frame 这种数据格式进行存储,这也是数据框这种结构最常用的原因。

有一个文件data.txt,内容如下:


> data <- read.table("data.txt", header = T, sep = "\t", row.names = 1) > data      age hight grade Andy   20   160    80 Frank  23   175    67 Brown  25   180    92

read.table函数的第一个参数为想要读取的文件的名称,header代表是否将文件的第一行作为数据框的列名称,sep代表文件分隔符,row.names = 1代表使用第一列的内容作为数据框的行名称。

read.table函数相对应,write.table函数将数据框的内容写到文件中。

> write.table(data, "data.csv", sep = ",")


数据框这种数据结构,是R语言与外部世界沟通的桥梁。这是由于数据框的这种特性,才导致数据框成为使用最广泛的数据结构。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存