Quantcast

袁伟时:中国的奴性和戾气从哪里来?

“芯片大学”虚晃一枪,人才断层问题不能跑步解决

两大中国首富双双被重挫-释放信号强烈

民间帝王赖小民和性感女星舒淇与许晴

深度解读 | 姜文《让子弹飞》

Facebook Twitter

分享到微信朋友圈

点击图标下载本文截图到手机
即可分享到朋友圈。如何使用?

自由微信安卓APP发布,立即下载!

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

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