首页 > 组学教程 > 30天学会R DAY4: R语言对象(2):数据框和列表及其操作
2022
06-04

30天学会R DAY4: R语言对象(2):数据框和列表及其操作

a907419167e41fff21613184026db5ee.jpeg

R语言主要分析的对象是数据集,R语言数据集类型主要是向量、矩阵、数据框、列表、数组等,我们主要介绍前4种。上一推文我们介绍了向量和矩阵,本文介绍数据框和列表。

一、数据框(Data.frame)

数据框是医学研究最重要的、也是最主要的格式,常见的医学数据导入到R语言形成的就是数据框。

R语言中做统计分析的样本数据,都是基于数据框类型操作的。数据框的每一列代表一个变量属性的所有取值,每一行代表一条样本数据。

数据库可以认为是多个同等长度向量的组合;

数据框和矩阵一样都是二维数据,但数据框和矩阵明显不同在于:第一,数据框数据每一列都有一个名称,也就是变量名!第二,数据框不同列,允许数据类型不同,可以分别是数字或者字符串,当然同一列数据,类型相同的。

1. 创建数据框

数据框的形成方式,第一种是通过函数data.frame()在向量基础上直接产生;第二种,由矩阵产生数据框,第三种就是外部数据库导入。本文介绍第一、二种,第三种方法在后续推文中介绍。

第一种,直接通过向量创建数据框

通过函数data.frame()把多个向量组合起来创建,并设置列名称,列名即为变量名。其基本格式为:

data.frame(col1,col2,col3,...)

其中,列向量col1, col2, col3, …可以为任意类型。

>x1=c(5.1,4.9,4.7,4.6)

>x2=c(3.5,3.0,3.2,3.1)

>x3=c(1.4,1.4,1.3,1.5)

>d1<-data.frame(x1,x2,x3)

或者

> d1<-data.frame(x1=c(5.1,4.9,4.7,4.6),x2=c(3.5,3.0,3.2,3.1), x3=c(1.4,1.4,1.3,1.5)) #x1,x2,x3为列名,也是变量名

> d1

x1 x2 x3

1 5.1 3.5 1.4

2 4.9 3.0 1.4

3 4.7 3.2 1.3

4 4.6

第二种,矩阵转化为数据框

>dmatrix<-matrix(1:8,c(4,2), )

>dmatrix

[,1] [,2]

[1,] 1 5

[2,] 2 6

[3,] 3 7

[4,] 4 8

>data.frame(dmatrix)

X1 X2

1 1 5

2 2 6

3 3 7

4 4 8

2. 数据框索引(子集提取)

数据框的提取方式,包括通过行列位置提取行列,通过列名提取列,通过$提取列,通过位置提取元素,用函数subset()按条件索引。

方法一,通过行列位置提取行列

d1[,1] # 返回数据框d1的第1列

d1[1,] # 返回数据框d1的第1行

d1[1:3,] # 返回数据框d1的第1至3行

方法二,通过列名提取列

d1["x1"] # 产生名为x1的一列,也就是产生变量为x1的一列结果,结果为向量

d1["x2"] # 产生名为x1的一列,也就是产生变量为x1的一列结果,结果为向量

d1["x3"] # 产生名为x3的一列

方法三,通过$提取列: 这种形式是今后医学数据分析最重要的提取形式

d1$x1 # 产生名为x1的一列,也就是产生变量为x1的一列结果,结果为向量

d1$x2 # 产生名为x1的一列,也就是产生变量为x1的一列结果,结果为向量

d1$x3 # 产生名为x3的一列

方法四,根据变量值的大小或者位置来提取行

d1[d1$x1>4,] #提取大于x1>2的行

d1[d1$x1>4 | d1$ x2<3,] #提取大于x1>4或x2<3的行

d1[d1$x1>4 & d1$x2<3,] #提取大于x1>4且x2<3的行

d1[d1$x2==3,] #提取大于x2等于6的行,R语言函数等号中用==,而不是=

方法五,通过位置提取元素

d1[1,1]——返回数据框d1的第1列第1个数据

d1$x1[1]或d1["x1"][1]——返回数据框d1的d1列第1个数据

方法六,用函数subset()按条件索引

> subset(d1, x1<5)

x1 x2 x3

2 4.9 3.0 1.4

3 4.7 3.2 1.3

4 4.6 3.1 1.5

3. 数据框的编辑

类似矩阵操作,可通过函数rbind(),增加行(样本数据),要求宽度(列数)相同;函数cbind(),增加列(属性变量),要求高度(行数)相同。

删除样本(行),类似矩阵操作。

用函数names()查看或修改数据框的列名。

增加样本数据(行)

> d2<-rbind(d1,list(5.0,3.6,1.4,0.2))

> d2

x1 x2 x3

1 5.1 3.5 1.4

2 4.9 3.0 1.4

3 4.7 3.2 1.3

4 4.6 3.1 1.5

5 5.0 3.6 1.4

增加属性变量(列)

> d3<-cbind(d1,x4=c("男","女","男","女"))

> d3

x1 x2 x3 x4

1 5.1 3.5 1.4 男

2 4.9 3.0 1.4 女

3 4.7 3.2 1.3 男

4 4.6 3.1 1.5 女

数据库最常见的的增加行列的方法是,采用转换产生新变量,这一方法在医学数据库是最重要的方法之一。请大家记住以下操作。

> d3$x5<-d3$x1-d3$x2 #我们产生新变量x5,是x1和x2的差值

> d3

x1 x2 x3 x4 x5

1 5.1 3.5 1.4 男 1.6

2 4.9 3.0 1.4 女 1.9

3 4.7 3.2 1.3 男 1.5

4 4.6 3.1 1.5 女 1.5

删除数据

> d1[,-1] #删除第1列

x2 x3

1 3.5 1.4

2 3.0 1.4

3 3.2 1.3

4 3.1 1.5

> d1[-1,] #删除第1行

x1 x2 x3

2 4.9 3.0 1.4

3 4.7 3.2 1.3

4 4.6 3.1 1.5

编辑数据框列名

> names(d1) #查看数据框列名

[1] "xxx1" "x2" "x3"

> names(d1)[1]="xxx1" #修改第1列列名

> names(d1)

[1] "xxx1" "x2" "x3"

4.数据框的基本运算

数据框运算往往针对是某一列或者某一行,最常见的是针对某一列的计算,方法和向量计算相似。

> length(d1$x2) #向量的长度

[1] 4

> mean(d1$x2) #计算向量均数

[1] 3.2

> sd(d1$x2) #计算向量的均数

[1] 0.2160247

> sum(d1$x2) #计算向量的总计

[1] 12.8

> median(d1$x2) #计算向量的中位数

[1] 3.15

由于每一行的数据类型往往不同,数据库一般不进行操作,除了少量的函数,比如length( )

> length(d1[1,])

[1] 3

二、列表(List)

列表就是一些对象或成分的有序集合(组合方式更自由)。列表允许整合若干对象到单个对象名下,例如,某个列表可能是若干向量、矩阵、数据框,甚至是其它列表的组合。

一般在使用R语言进行数据分析和挖掘的过程中,向量和数据框是用的最多的,列表常在存储较复杂的数据时作为数据对象类型。

列表提供了一种简单的方式来组织和重新调用不相干的信息。另外,许多R函数的运行结果都是用列表形式返回的。

列表在医学数据分析地位不突出,这里只做简单介绍。

1. 创建列表

用函数list(),基本格式为:

list(object1,object2,...)

其中,object对象可以是任何类型。

若同时为列表中的对象命名:

list(name1=object1,name2=object2,...)

> mylist<-list(

a=c(1,2,3,4),

b=c("one","two","three"),

c=c(TRUE,FALSE),

d=(1+2i))

> mylist

$a

[1] 1 2 3 4

$b

[1] "one" "two" "three"

$c

[1] TRUE FALSE

$d

[1] 1+2i

查看列表的数据结构

>summary(data)

Length Class Mode

a 4 -none- numeric

b 3 -none- character

c 2 -none- logical

d 1 -none- complex

创建一个内含多种结构的列表

>g<-"My List"

>h<-c(25,26,18,39)

>j<-matrix(1:10,nrow=5)

>mylist<-list(title=g,ages=h,j)

>mylist

$title

[1] "My List"

$ages

[1] 25 26 18 39

[[3]]

[,1] [,2]

[1,] 1 6

[2,] 2 7

[3,] 3 8

[4,] 4 9

[5,] 5 10

>summary(mylist)

Length Class Mode

title 1 -none- character

ages 4 -none- numeric

10 -none- numeric

2. 列表索引(子集提取)

与数据框操作类似,但是用双重方括号。

mylist[[1]] #索引列表data的第1列

mylist[["g"]] #按名称索引,同mylist [[1]]

mylist $g #索引列表mylist的名称为d的列

mylist [[1]][1] #索引列表mylist的第1列的第1个元素

3. 列表的编辑

与向量的编辑类似,使用函数c()进行合并。

列表增加列

>data1<-c(mylist,list(e=c(5,6,7)))

>data1

$a

[1] 1 2 3 4

$b

[1] "one" "two" "three"

$c

[1] TRUE FALSE

$d

[1] 1+2i

$e

[1] 5 6 7

DAY4的内容就介绍到这里!


转自:医学论文与统计分析

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情