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的内容就介绍到这里!
转自:医学论文与统计分析
- 本文固定链接: https://maimengkong.com/zu/977.html
- 转载请注明: : 萌小白 2022年6月4日 于 卖萌控的博客 发表
- 百度已收录