30天学会R DAY4: R语言对象(2):数据框和列表及其操作
卖萌控的博客
点击这里进入电脑版页面!体验更好
30天学会R DAY4: R语言对象(2):数据框和列表及其操作
2022-6-4 萌小白
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的内容就介绍到这里!




转自:医学论文与统计分析
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容