R语言实战Chapter2 创建数据集

Chapter2 创建数据集

第一章R语言介绍直接忽略了,理解R是个很强的工具就OK

  • 探索R中的数据结构
  • 输入数据
  • 导入数据
  • 标注数据
  • 处理数据对象的实用函数

2.1 数据集的概念
数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。请添加图片描述
在如图所示的数据集中,PatientID是行/实例标识符,AdmDate是日期型变量,Age是连续型变量,Diabetes是名义型变量,Status是有序性变量

R中有许多用于存储数据的结构,包括标量、向量、数组、数据框和列表

R将实例标识符称为rownames(行名),将类别型(名义型和有序型)变量称为因子(factors)。后面会给出日期型数据的处理。

2.2数据结构
请添加图片描述
一些定义:
对象(object)是指可以赋值给变量的任何事物,包括常量、数据结构、函数、甚至图形。对象都拥有某种模式,描述了对象是如何存储的,以及某个类,像print这样的泛型函数表明如何处理此对象

数据框是R中用于存储数据的一种结构:列表示变量,行表示观测。同一个数据框可以存储不同类型(如数值型,字符型)的变量。数据框是用来存储数据集的主要数据结构

因子是名义型变量或有序型变量,在R中被特殊地存储和处理
2.2.1向量
向量是用于存储数值型、字符型或逻辑性数据的一维数组。函数c()来创建向量

a<-c(1,2,5,3,6,-2,4)
b<-c("one","two","three")
c<-c(TRUE,TRUE,FALSE)

a是数值型向量,b是字符型向量,c是逻辑型向量。注意:单个向量中的数据必须拥有相同的类型或模式,不得混杂
ps:标量是只含一个元素的向量,例如f<-3、g<-“US”
向量[ ]用来访问向量中的元素

a<-c(1,5,6,7,8)
a[3]
a[c(1,3,5)]
a[2:5]

请添加图片描述

最后语句的冒号用于生成一个数值序列,例如a<-c(2:6)等价于a<-c(2,3,4,5,6)

2.2.2矩阵
矩阵是一个二维数组,matrix()函数可以创建矩阵
在这里插入图片描述
vector包含了矩阵的元素,nrow和ncol用来指定行和列的维数,dimnames包含了可选的以字符向量表示的行名和列名,byrow=TRUE表明按行填充,默认下按列填充

y<-matrix(1:20,nrow = 5,ncol = 4) #按行
y

请添加图片描述

cells<-c(1,26,24,68)
rnames<-c("R1","R2")
cnames<-c("C1","C2")
mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames)) #按行填充的2*2
mymatrix

请添加图片描述
同理,矩阵也可以用[ ]来提取矩阵中的数据:X[i,]提取矩阵X中的第i行,X[,j]提取矩阵中的第j列,X[i,j]指第i行第j个元素,选择多行多列的时候i和j可以是字符型向量:

x<-matrix(1:10,nrow = 2)
x
x[2,]
x[,2]
x[2,2]
x[1,c(4,5)]

请添加图片描述
和向量类似,矩阵里面也是只能同一种类型的元素,当维度超过2时,数组时更好的选择,当数据模式较多时,可以使用数据框

2.2.3数组
*数组(array)*与矩阵类似,但是维度可以大于2。array()函数来创建数组:

在这里插入图片描述
vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames是可选的、各维度名称标签的列表

dim1<-c("A1","A2")
dim2<-c("B1","B2","B3")
dim3<-c("C1","C2","C3","C4")
z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3)) #2*3*4的三维数值型数组
z  

请添加图片描述
数组是矩阵的一个自然推广。数组的数据也只能有一种模式,同理从数组中选取元素的方式和矩阵相同,例如z[1,2,3]就是取的15

2.2.4数据框
数据框的概念更为一般化,是最常见的数据结构。数据框中可以有多重模式的数据:
在这里插入图片描述
列向量col1、col2…可以为任意类型(字符,逻辑或数值型等等)。每一列的名字可以由函数names()指定

patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("Poor","Improved","Excellent","Poor")
patientData<-data.frame(patientID,age,diabetes,status)
patientData

请添加图片描述

选取数据框中的元素可以使用前边的记号,也可以直接指定列名:

patientData
patientData[1:2]
patientData[c("diabetes","status")]
patientData$age #$可以用来选取一个给定数据框中的某个特定变量

请添加图片描述

如果嫌弃每次都要输入一次data$比较麻烦,可以考虑attach()和detach(),或者单独使用with()来简化代码
attach()、detach()、和with()

  • 函数attach()可以将数据框添加到R的搜索路径中,R在遇到一个变量名后将会检索路径中的数据框
  • 函数detach()可以将数据框从搜索路径中移除,但是它不会对数据框本身做任何处理

缺陷:这两个函数最好在分析一个数据框,并且不太可能有多个同名对象时使用

with(data,{ })这样{ }之间的语句都是只针对数据框data执行,这样就无需担心同名
缺陷:赋值仅在此函数的括号内生效,出括号外就查无此人了

解决方案:在括号里的赋值符号从<-变成<<-,它可以把对象保存到with()之外的全局环境中

实例标识符
实例标识符可以通过数据框操作函数中的rowname选项指定:
在这里插入图片描述
将patientID指定为R中标记各类打印输出和图形中实例名称所用的变量

2.2.5因子
在这里插入图片描述

类别(名义型)变量和有序型变量(有序类别)在R中称为因子(factor)

非常重要
函数factor()以一个整数向量的形式存储类别值,取值范围是[1,2,…k](k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上:

diabetes<-c("Type1","Type2","Type1","Type1")
diabetes<-factor(diabetes)

factor将此向量存储为(1,2,1,1,),并在内部将其关联为1=Type1,2=Type2(具体复制根据字母顺序而定)针对向量diabetes的任何分析都会将其作为名义型变量对待

ordered选项设置为有序型变量:

status<-c("Poor","Improved","Excellent","Poor",ordered=TRUE)

ordered=TRUE表示有序型变量
对于字符型向量,因子的水平默认依照字母顺序创建,但这往往不能让人满意,水平levels选项可以解决这个问题:

status<-factor(status,ordered = TRUE,levels = c("Poor","Improved","Excellent"))

这就是赋值为1=Poor,2=Improved,3=Excellent,注意指定的水平要与数据中的真实值相匹配,任何在数据中出现而未在参数中列举的数据都将被设置为缺失值

数值型变量可以用levels和labels参数来编码因子。如果男性被编码成1,女性被编码成2,则:

sex<-factor(sex,levels =c(1,2),labels = c("Male","Female"))

把变量转换成一个无序因子,标签的顺序必须和水平一致

因子的使用:

#以向量形式输入数据
patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("Poor","Improved","Excellent","Poor")
diabetes<-factor(diabetes)
status<-factor(status,ordered = TRUE)
patientData<-data.frame(patientID,age,diabetes,status)
#显示对象的结构
str(patientData)
#显示对象的统计概要
summary(patientData)

请添加图片描述

2.2.6列表
列表就是一些对象(或成分)的有序集合,某个列表可以是若干向量、矩阵、数据框,甚至其他列表的组合,可以用list()创建列表:
在这里插入图片描述
其中的object可以是目前为止讲的任意结构。
还可以为列表中的对象命名:
在这里插入图片描述

g<-"My First List"
h<-c(25,26,18,39)
j<-matrix(1:10,nrow = 5)
k<-c("one","two","three")
#创建列表
mylist<-list(title=g,ages=h,j,k)
mylist
#提取成分
mylist[[2]]
mylist[["ages"]]

请添加图片描述

  1. 列表允许一种简单的方式组织和重新调用不相干的信息
  2. 许多R函数的运行结果都是以列表的形式返回的

2.3数据的输入
在这里插入图片描述
2.3.1从键盘录入数据
在这里插入图片描述
或者对一个已经编辑了的或者导入的数据进行编辑可以简洁地写为
fix(mydata)

2.3.2从带分隔符的文本文件导入数据
在这里插入图片描述
在这里插入图片描述
read.table默认把字符变量转化为因子
2.3.3导入Excel数据
读取一个Excel的最好方式,就是在Excel中将其导出为一个逗号分割文件(csv),并用上文方式导入R
如果想直接去读取,须下载并且加载包xlsx、xlsxjars、rJava和一个正常工作的Java:
在这里插入图片描述
file是Excel工作簿的所在路径,n为要导入的工作表序号,例如:
在这里插入图片描述
2.2.4——2.3.12

有需要直接查书

2.4数据集的标注
2.4.1变量标签

一种解决方法是把变量标签作为变量名

不太理想
2.4.2值标签
函数factor()可为类别变量创建值标签
在这里插入图片描述
2.5处理数据对象的实用函数
在这里插入图片描述
在这里插入图片描述
head()查看数据集的前六行,tail()查看数据集的后六行

end

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值