R-数据科学(一):数据结构

R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位访问其中个别元素的标记等方面均有所不同。下图是一张R语言数据结构图。

在这里插入图片描述

向量

定义:

  • 用于存储数值型、字符型或逻辑型数据的一维数组。向量中的元素类型必须全为数值型或者字符型或者逻辑型。向量中的单个元素称为标量,属于特殊的向量。

向量是R语言中最基础,也是最重要的数据类型。

向量类型

  • 数值型向量:向量中的元素全为数字
  • 字符型向量:向量中的元素既可以全为字符,也可以包含数字,但是这里的数字是字符串,并不是数值。
  • 逻辑型向量:向量中的元素只有两种TURE或者FALSE

向量的创建

数值型向量的创建

c(1,2,3,4,5,6)                 
1:6
rep(1,3) # 重复1三次
rep(1:3,3) # 重复(1,2,3)三次
rep(1:3,each = 3) # 重复1,2,3各三次
c(rep(1:3,3),rep(1:3,each = 3)) # 合并向量

字符型向量的创建

b = c("one", "two", "three")
b
## [1] "one"   "two"   "three"

逻辑型向量的创建

c = c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
c
## [1]  TRUE  TRUE  TRUE FALSE  TRUE FALSE

向量中元素的访问

a = c("k", "j", "h", "a", "c", "m")
a[2] #向量a中第二个元素
## [1] "j"

a[c(1,2,3)] #向量a中前3个元素
## [1] "k" "j" "h"

a[1:3] #向量a中前3个元素
## [1] "k" "j" "h"

矩阵

定义:

  • 矩阵是二维数组,矩阵中的元素都拥有相同的类型。大多数情况下,我们使用的矩阵就是数值型矩阵,矩阵中的元素全为数值,矩阵也可以理解为折叠起来的数值型向量。

矩阵的创建

rnames = c('r1','r2','r3','r4','r5','r6')
cnames = c('c1','c2','c3','c4','c5')
myymatrix <- matrix(1:30,   
                    nrow=6, 
                    ncol=5, 
                    byrow=F, # 默认按列填充
                    dimnames=list(rnames, cnames)) # 行名和列名
myymatrix
##    c1 c2 c3 c4 c5
## r1  1  7 13 19 25
## r2  2  8 14 20 26
## r3  3  9 15 21 27
## r4  4 10 16 22 28
## r5  5 11 17 23 29
## r6  6 12 18 24 30

矩阵下标的使用

提取矩阵中第2行

a1 = myymatrix[2,]
a1
## c1 c2 c3 c4 c5 
##  2  8 14 20 26

提取矩阵中的1,3,5行

a2 = myymatrix[c(1,3,5),]
a2
##    c1 c2 c3 c4 c5
## r1  1  7 13 19 25
## r3  3  9 15 21 27
## r5  5 11 17 23 29

提取矩阵中第2列

b1 = myymatrix[,2]
b1
## r1 r2 r3 r4 r5 r6 
##  7  8  9 10 11 12

提取矩阵中的2,4,5列

b2 = myymatrix[,c(2,4,5)]
b2
##    c2 c4 c5
## r1  7 19 25
## r2  8 20 26
## r3  9 21 27
## r4 10 22 28
## r5 11 23 29
## r6 12 24 30

提取任意子矩阵

data = myymatrix[1:4,2:4]
data
##    c2 c3 c4
## r1  7 13 19
## r2  8 14 20
## r3  9 15 21
## r4 10 16 22

数组

定义:

  • 数组和矩阵基本上属于一种数据类型,矩阵是特殊的数组,而数组一般指三维及以上。数组在R语言中用的很少,所以这里只写出数组的创建方法。

数组的创建

dim1 = c('A1','A2')
dim2 = c('B1','B2','B3')
dim3 = c('C1','C2','C3','C4')
data = array(1:24,
             dim = c(2,3,4),
             dimnames = list(dim1,dim2,dim3)) #相当于创建423列的矩阵
data
## , , C1
## 
##    B1 B2 B3
## A1  1  3  5
## A2  2  4  6
## 
## , , C2
## 
##    B1 B2 B3
## A1  7  9 11
## A2  8 10 12
## 
## , , C3
## 
##    B1 B2 B3
## A1 13 15 17
## A2 14 16 18
## 
## , , C4
## 
##    B1 B2 B3
## A1 19 21 23
## A2 20 22 24

数据框

定义:

  • 数据框和矩阵结构相似,由行列组成,数据框中每一列为一个成分,数据框中的成分类型分为两种:一种是向量,另外一种是因子。

数据框是R中最常见的数据结构之一,一般数据处理都是基于数据框。

数据框的创建

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
##   patientID age diabetes    status
## 1         1  25    Type1      Poor
## 2         2  34    Type2  Improved
## 3         3  28    Type1 Excellent
## 4         4  52    Type1      Poor

选取数据框的元素

数据框中常见的元素选择方法有三种。

方法一: 和矩阵下标的使用一样,不再过多介绍。

方法二:

  • 变量名筛选

    patientdata[,c('age','diabetes')]
    ##   age diabetes
    ## 1  25    Type1
    ## 2  34    Type2
    ## 3  28    Type1
    ## 4  52    Type1
    

方法三:

  • 使用attach()函数和deteach()函数

    attach(mtcars) 
    plot(mpg, disp) 
    detach(mtcars)
    

在这里插入图片描述

  • 使用with()函数,with()函数使用有一个缺点,with()函数里面赋值给对象需要用<<-,不能用<-或者=,只有这样才可以将对象保存到全局环境中。

    with(mtcars, { 
      plot(mpg, disp) 
    })
    

在这里插入图片描述

因子

在我们处理的数据中,通常将数据框中的列(成分)也称为变量或者属性,而行称为观测或者示例,在R中把数据框的列叫做变量更普遍。变量是统计学中的名词,在数据框中变量既可以是向量,也可以是因子。变量通常有三种类型,名义型(类别型)、有序型和连续型变量。

变量类型:

  • 名义型变量:性别有男女之分,体型有胖瘦之别,这些都是名义型(类别型)变量

  • 有序型变量:癌症的分期有早期、中期和晚期,变量中的值有顺序之分,称为有序变量

  • 连续型变量:人的体重就是连续型变量,表现为一定范围内的任意值,与数值型向量等价。

名义型变量有序性变量在R中统称为因子

因子的创建

factor()函数创建名义型因子

sex = c("male", "female", "male", "female")
sex = factor(sex)
sex;class(sex)
## [1] male   female male   female
## Levels: female male
## [1] "ordered" "factor"

factor()函数创建有序型因子

status = c("early", "middle", "late", "late")
status = factor(status,
                order=TRUE,
                levels=c("early", "middle", "late"))
status;class(status)
## [1] early  middle late   late  
## Levels: early < middle < late
## [1] "ordered" "factor"

有时候需要将因子名称用数字表示,这时候就需要对因子重命名

type = c("Type1","Type1","Type2","Type1","Type2")
type = factor(type,levels = c("Type1","Type2"),labels = c(1,2))

列表

定义:

  • 列表是R语言中高级数据类型,列表是一些对象的有序集合,对象为任何一种数据类型。列表中的对象可以是向量、矩阵、数组、数据框和因子,甚至列表中也可以包含列表。

列表的创建

一般使用list()函数来创建列表

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
## $title
## [1] "My First 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
## 
## [[4]]
## [1] "one"   "two"   "three"

列表中对象的提取

使用mylist$agemylist[[2]]都表示提取向量h

mylist$age;mylist$age == mylist[[2]]
## [1] 25 26 18 39
## [1] TRUE TRUE TRUE TRUE

处理对象的通用函数

函数作用
length(object)显示对象中元素/成分的数量
str(object)显示某个对象的结构
class(object)显示某个对象的类型
head(object)列出某个对象的开始部分
tail(object)列出某个对象的最后部分
ls()显示当前的对象列表
rm(object, object, ...)删除一个或更多个对象。语句rm(list = ls())将删除当前工作环境中的几乎所有对象

数据转换

判断转换
is.numeric()as.numeric()
is.character()as.character()
is.vector()as.vector()
is.matrix()as.matrix()
is.data.frame()as.data.frame()
is.factor()as.factor()
is.logical()as.logical()

特殊数据

格式含义查看
NA缺失值is.na()
NaN非数字,如0/0is.nan()
Inf无穷数,如1/0is.infinite()
NULL空数据is.null()

参考资料

R语言实战(二)

本博客内容将同步更新到个人微信公众号生信玩家。欢迎大家关注~~~
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值