生物信息学数据科学与R语言生物信息学与算法

R语言入门2:数据结构-3

2017-11-21  本文已影响20人  曹务强

6. 因子(farcor)

在R语言中,因子是用来处理分类数据的,分类数据又可以分为有序和无序。我们可以把因子简单理解为整数向量+标签。比如,我们把性别(男,女)分别加上标签(1和2),那么1就代表男,2就代表女。

(1)如何创建因子

# 使用factor()函数创建因子
> x <-factor(c("female","female","male","male","female"))
> x
[1] female female male   male   female #因子的内容
Levels: female male  #因子包含两个水平
# 创建因子时添加标签
> y<-factor(c("female","female","male","male","female"),levels = c("male","female")) # 使用levels()添加水平参数
> y
[1] female female male   male   female #因子的内容不变
Levels: male female # 水平的顺序发生了改变

当我们使用R进行统计分析时,可以通过因子指定分析的基线水平,这在统计分析中时非常重要的。

(2)对因子的操作

# 使用table()函数统计因子各水平的个数
> table(y)
y
  male female 
     2      3
# 使用unclass()函数去掉因子的水平
> unclass(y)
[1] 2 2 1 1 2
attr(,"levels") 
[1] "male"   "female"

前面我们提高过,可以把因子简单理解为整数向量+标签。如果使用uncalss()函数去掉因子的水平后,再查看其属性,会发生什么呢?

> class(unclass(y))
[1] "integer" #变成了整数型向量

7.缺失值(missing value)

在R中缺失值有两种表示方式:NaN和NA。NaN一般用来表示数字的缺失,而NA可用来表示多种类型的缺失。因此,NA具有类型属性,比如integer NA(整数缺失)和character NA(字符缺失)等。

判断向量中是否含有与缺失值

# 创建一个含有NA类型缺失值的向量
> x<- c(1,2,NA,3,NA,5)
> is.na(x) # 使用is.na()函数查看是否含有NA
[1] FALSE FALSE  TRUE FALSE  TRUE FALSE
> is.nan(x) #使用is.nan()查看是否含有NaN
[1] FALSE FALSE FALSE FALSE FALSE FALSE
# 创建一个含有NaN和NA类型缺失值的向量
> x<- c(1,2,NA,3,NaN,5)
> is.na(x) # 使用is.na()函数查看是否含有NA
[1] FALSE FALSE  TRUE FALSE  TRUE FALSE
> is.nan(x)
[1] FALSE FALSE FALSE FALSE  TRUE FALSE  #使用is.nan()查看是否含有NaN

以上例子说明,is.na()函数可识别NA和NaN类型的缺失值,而is.nan()函数只能识别NaN类型的缺失值,而不能识别NA类型的缺失值。这也说明了,NA包含NaN。

8.数据框(data frame)

在R中,数据框是用来存储表格数据的。我们可以把数据框看做各元素长度相同的列表,每个元素代表一列数据,每个元素的长度代表行数,并且元素的类型可以不同。

(1)数据框的创建

# 使用data.frame()函数创建数据框
> def <- data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,FALSE,TRUE,TRUE))
> def
  id name gender
1  1    a   TRUE
2  2    b  FALSE
3  3    c   TRUE
4  4    d   TRUE

由上面输出的结果可以看到,我们定义的第一个元素为数据框的第一列,第二个元素时数据框的第二列,第三个元素时数据框的第三类。并且,数据框和矩阵非常相似,所不同的是,矩阵中每一列中元素的类型都是一样的,而数据框可以不同。

同时,我们还可以把数据框看成列表,数据框的第一列对应于列表的第一个元素,数据框的第二列对应于列表的第二个元素,数据框的第三类对应于列表的第三个元素:

> def2 <- list(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,FALSE,TRUE,TRUE))
> def2
$id
[1] 1 2 3 4

$name
[1] "a" "b" "c" "d"

$gender
[1]  TRUE FALSE  TRUE  TRUE

注:本文为我在慕课网课程R语言基础的学习笔记,使用Markdown写作。

上一篇下一篇

猜你喜欢

热点阅读