美文网首页R语言
[R语言]对R中基本数据管理的进一步认识

[R语言]对R中基本数据管理的进一步认识

作者: 巩翔宇Ibrahimovic | 来源:发表于2020-02-17 11:11 被阅读0次

我只挑取了我平时用的不多的一些操作,或者是看完眼前突然一亮的更精简的代码,遗漏之处还请多多指教。

common mathematic functions.png

Simple Calculations in R,calling Functions,and Getting help in R

1.round usage(进行数值的round our square root(四舍五入))

默认保留小数点后0位,如:

> round(sqrt(3.5))
[1] 2

也可以通过指定值来改变保留位数。

> round(sqrt(3.5),digits = 3)
[1] 1.871
#简写为
> round(sqrt(3.5),3)
[1] 1.871

Vectors, Vectorization, and Indexing

一个向量的长度为1,可以使用length()来查看向量的长度,使用c来创造更长的向量。

> x <- c(56, 95.3, 0.4)
> x
[1] 56.0 95.3  0.4
> length(x)
[1] 3

R的算术运算符都是向量化的,不过运算前要保证两向量长度相等或长向量是短向量的整数倍。

> y <- c(3.2, 1.1, 0.2)
> y
[1] 3.2 1.1 0.2
> x+y #+-*/均可
[1] 59.2 96.4  0.6

产生整数序列。

> seq(3, 5)
[1] 3 4 5
> 1:5
[1] 1 2 3 4 5

短向量和长向量进行运算时,会将短向量进行对长向量的再循环(recycle)。

> c(1, 2) + c(0, 0, 0, 0)#加减乘除均可
[1] 1 2 1 2
> c(1, 2) + c(0, 0, 0)
[1] 1 2 1
Warning message:
In c(1, 2) + c(0, 0, 0) : 长的对象长度不是短的对象长度的整倍数

除了四则运算,一些R的其他算术功能也是向量化的,如sqrt(),round(),log()

> sqrt(x)
[1] 7.4833148 9.7621719 0.6324555
> round(sqrt(x), 3)
[1] 7.483 9.762 0.632
> log(x)/2 + 1 # note how we can combined vectorized operations
[1] 3.0126758 3.2785149 0.5418546

对向量中的单个元素进行位置提取或赋值。

> x <- c(56, 95.3, 0.4)
> x[2]
[1] 95.3
> x[4] #提取不存在的元素显示not availabel.
[1] NA
> x[3] <- 0.5
> x
[1] 56.0 95.3  0.5

设置、更改向量的名字。

> b <- c(a=3.4, b=5.4, c=0.4)
> b
  a   b   c 
3.4 5.4 0.4
> names(b)
[1] "a" "b" "c"
> names(b) <- c("x", "y", "z") # change these names
> b
 x y z
3.4 5.4 0.4

根据字符来提取向量中的元素。

> b['x']
  x 
3.4

从向量中根据位置同时提取多个元素,同一位置的元素可进行多次提取。

> x[c(2,3)]
[1] 95.3  0.5
> z <- c(3.4, 2.2, 0.4, -0.4, 1.2)
> z[3:5] # extract third, fourth, and fifth elements
[1]  0.4 -0.4  1.2

对于提取超出范围元素,R会返回NA。

> z[c(2, 1, 10)]
[1] 2.2 3.4  NA

使用负号排除不想提取的元素。

> z[c(-4, -5)] # exclude fourth and fifth elements
[1] 3.4 2.2 0.4

使用提取对向量内的元素进行重排。

> z[c(3, 2, 4, 5, 1)]
[1]  0.4  2.2 -0.4  1.2  3.4

对向量内的元素根据位置进行颠倒。

> z[5:1]
[1]  1.2 -0.4  0.4  2.2  3.4

order()返回索引的向量,揭示了元素的顺序,默认是升序。p186,不懂这个顺序是什么顺序。

> order(z)
[1] 4 3 5 2 1
> z[order(z)]
[1] -0.4 0.4 1.2 2.2 3.4
> order(z, decreasing=TRUE)
[1] 1 2 5 3 4
> z[order(z, decreasing=TRUE)]
[1] 3.4 2.2 1.2 0.4 -0.4

使用sample()产生随机数。

> set.seed(0) # we set the random number seed so this example is reproducible
> i <- sample(length(z), replace=TRUE)
> i
[1] 5 2 2 3 5
> z[i]
[1] 1.2 2.2 2.2 0.4 1.2

使用比较运算符,如==,!=,<,<=,>,>=,来产生逻辑向量TRUE或FALSE。

> v <- c(2.3, 6, -3, 3.8, 2, -1.1)
> v == 6
[1] FALSE  TRUE FALSE FALSE FALSE FALSE
> v <= -3
[1] FALSE FALSE  TRUE FALSE FALSE FALSE
> abs(v) > 5
[1] FALSE  TRUE FALSE FALSE FALSE FALSE

还可使用逻辑运算符来提取元素。

> v[c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE)]
[1] 2.3 6.0 3.8
#如果碰到,某一列元素有多个值,不能挨个输入位置进行提取时
index1<-grep("RNA-seq",a$v1)
a[index1,]

提取向量中满足某一条件的元素。

> v[v > 2]
[1] 2.3 6.0 3.8

比较运算符和逻辑运算符(&(and),|(or),!(no))的连用

> v > 2 & v < 4
[1]  TRUE FALSE FALSE  TRUE FALSE FALSE
> v[v > 2 & v < 4]
[1] 2.3 3.8

R的比较运算符和逻辑运算符。

> 大于

< 小于

>=大于或等于

<=小于或等于

==等于

!不等于

&& 逻辑和(and)

|| 逻辑或(or)

&元素逻辑和(and)

|元素逻辑或(or)

!元素逻辑非(not)
Vector types

R' vector types1.png
R' vector types2.png

R的特殊值:

NA not available,代表丢失值。

NULL 代表没有值。

-Inf,Inf 正负无穷

NaN not a number

Factors and classes in R

factors存储类别向量。

> chr_hits <- c("chr2", "chr2", "chr3", "chrX", "chr2", "chr3", "chr3")
> hits <- factor(chr_hits)
> hits
[1] chr2 chr2 chr3 chrX chr2 chr3 chr3
Levels: chr2 chr3 chrX
> levels(hits)
[1] "chr2" "chr3" "chrX"

使用levels去包含所有相关的levels

> hits <- factor(chr_hits, levels=c("chrX", "chrY", "chr2", "chr3", "chr4"))
> hits
[1] chr2 chr2 chr3 chrX chr2 chr3 chr3
Levels: chrX chrY chr2 chr3 chr4

添加或重命名现存的levels。

> levels(hits) <- list(chrX="chrX", chrY="chrY", chr2="chr2",
 chr3="chr3", chr4="chr4")
> hits
[1] chr2 chr2 chr3 chrX chr2 chr3 chr3
Levels: chrX chrY chr2 chr3 chr4

使用table()对levels里的个数进行计数。

> table(hits)
hits
chrX chrY chr2 chr3 chr4
 1 0 3 3 0

Exploring and Transforming Dataframes

> d <- read.csv("Dataset_S1.txt")
> bd <- read.delim("noheader.bed", header=FALSE,
 col.names=c("chrom", "start", "end"))

使用nrowncol来查看行或列的维度。

> nrow(d)
[1] 59140
> ncol(d)
[1] 16
> dim(d)
[1] 59140 16

也可单独显示其行名rownames()或列名colnames().

> colnames(d)
 [1] "start" "end" "total.SNPs" "total.Bases"
 [5] "depth" "unique.SNPs" "dhSNPs" "reference.Bases"
 [9] "Theta" "Pi" "Heterozygosity" "X.GC"
[13] "Recombination" "Divergence" "Constraint" "SNPs"

使用summary()来查看某一列数值分布情况。

> summary(d$total.SNPs)
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 0.000 3.000 7.000 8.906 12.000 93.000

从数据框提出来的数据仍然是向量。

> d[d$Pi > 16 & d$percent.GC > 80, c("start", "end", "Pi", "depth")]
 start end Pi depth
58550 63097001 63098000 41.172 2.39
58641 63188001 63189000 16.436 3.21
58642 63189001 63190000 41.099 1.89

如果我们想要从数据框中提出来的数据变为数字,可以用以下代码。(注意这里我们没有必要在中括号里面用逗号是因为d$percent是一个向量,而不是一个二维数据框)

#提出所有pi值大于16的所有GC含量的观察值。
> d$percent.GC[d$Pi > 16]
[1] 39.1391 38.0380 36.8368 36.7367 43.0430 41.1411 [...]

提取满足某一列条件的另一列元素。

#可以使用比较运算符,看GC含量大(小)于80的测序深度
> summary(d$depth[d$percent.GC >= 80])
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 1.05 1.89 2.14 2.24 2.78 3.37
> summary(d$depth[d$percent.GC < 80])
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 1.000 6.970 8.170 8.185 9.400 21.910
#使用逻辑运算符,查看(不)在着丝粒的pi值
> summary(d$Pi[d$cent])
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 0.00 7.95 16.08 20.41 27.36 194.40
> summary(d$Pi[!d$cent])
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 0.000 5.557 10.370 12.290 16.790 265.300

which()返回真值所在的位置。

> d$Pi > 3
[1] FALSE TRUE FALSE TRUE TRUE TRUE [...]
> which(d$Pi > 3)
[1] 2 4 5 6 7 10 [...]
#一个相等的用法
d[$Pi > 3, ] is identical to d[which(d$Pi > 3), ]

通常使用逻辑值从数据框中取子集时省略which(),这样使得代码更简洁。

which()返回向量中第一个最小值和最大值的索引。

> d[which.min(d$total.Bases),]
 start end total.SNPs total.Bases depth [...]
25689 25785001 25786000 0 110 1.24 [...]
> d[which.max(d$depth),]
 start end total.SNPs total.Bases depth [...]
8718 8773001 8774000 58 21914 21.91 [...]

使用subset()提取元素,不需要使用$来指定列。基本用法就两个参数,第一个参数指明要操作的数据框,第二个参数说明操作条件。

$ subset(d, Pi > 16 & percent.GC > 80)
 start end total.SNPs total.Bases depth [...]
58550 63097001 63098000 5 947 2.39 [...]
#上述代码也等同于
d[d$Pi > 16 & d$percent.GC > 80, ]

在subset()添加第三个参数来指定列打印到屏幕上。

> subset(d, Pi > 16 & percent.GC > 80,
 c(start, end, Pi, percent.GC, depth))
 start end Pi percent.GC depth
58550 63097001 63098000 41.172 82.0821 2.39
58641 63188001 63189000 16.436 82.3824 3.21
58642 63189001 63190000 41.099 80.5806 1.89

参考:
《Bioinformatics Data Skills》
素材地址:https://github.com/vsbuffalo/bds-files

相关文章

  • [R语言]对R中基本数据管理的进一步认识

    我只挑取了我平时用的不多的一些操作,或者是看完眼前突然一亮的更精简的代码,遗漏之处还请多多指教。 Simple C...

  • R语言常用函数整理(基础篇)

    R语言基础函数整理 R语言常用函数整理本篇是基础篇,即R语言自带的函数。 一、数据管理 vector:向量nume...

  • 学习小组的DAY5——王康

    今天进一步对R语言的学习 开始对向量,提取元素,赋值还是按照命令基本能理解 总的来说,这期的R让我对变量有了进一步了解。

  • 学习小组Day4笔记-阿树

    R语言基础 一、认识R和Rstudio 1、plot函数绘制plot()函数是R中基本的画x-y两个变量的函数,其...

  • DAY4笔记-Leo

    安装R和Rstudio 认识R和Rstudio 设置字体大小 R语言基本操作 用Rprojiect管理目录 显示文...

  • R语言基本数据管理

    基本数据管理 在前面的章节中,我们讨论了多种导入数据到R中的方法。遗憾的是,将你的数据表示为矩阵或数据框这样的矩形...

  • R语言之基础

    一:R语言之基本数据结构 1. 向量 向量是 R 语言中最基本的数据类型,在 R 中没有单独的标量(例如 1 本质...

  • 《学习小组Day4笔记--寒鹤》

    R语言基础 今天的课程内容是R语言基础,包括R及Rstudio的安装,R语言的一些基本操作等。因之前已学习过R语言...

  • 学习小组Day4笔记--行

    正式开始学习R语言了,今天笔记内容为R语言基础和ggplot2的入门学习 R语言基础 1、认识R与RStudio ...

  • 生信小组DAY4--如晤

    今日学习主题:安装R和Rstudio和练习基本操作安装教程果子学生信 给自己一个全新的R语言环境 认识R和Rst...

网友评论

    本文标题:[R语言]对R中基本数据管理的进一步认识

    本文链接:https://www.haomeiwen.com/subject/ygqbfhtx.html