博主的话❤️:
大家好✨,这里是想做生信大恐龙🦖的生信小白。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天是北方的小年,祝福大家小年快乐。
目录
一、doBy包中的函数
在上章内容中我们讲了tapply()函数(tapply函数介绍)可以用于分组。数据处理中关于对数据进行分组的包有很多,其中doBy最有名。我们主要介绍doBy中的三个函数。分别是summaryBy(),orderBy(),sampleBy()。
1.1 doBy()的准备
首先需要安装doBy包:
install.packages("doBy")
library(doBy)
1.2 doBy()三个函数的描述
intro <- data.frame(functions = c("doBy::summaryBy","doBy::orderBy","doBy::sampleBy"),
features = c("根据列的值将数据框分组后,计算描述性统计量",
"根据指定列的值对数据框排序",
"根据特定列的值将数据框分组,然后从各分组抽取样本"))
二、函数的介绍
2.1 summaryBy()
先将R中自带的base包提供的summary()函数与doBy::summaryBy()进行对比。
::表示命名空间,doBy::summaryBy()表示doBy数据包中的summaryBy()函数
#针对多种模型函数的结果,返回描述性统计量
base::summary(
object #要统计的对象
)
#根据列的值将数据框分组后,计算描述性统计量。返回值为数据框
doBy::summaryBy(
formula #要执行描述统计的公式
data = parent.frame() #要应用公式的数据
)
base中summary()函数是泛型函数,用于查看数据的统计摘要。如果通过参数给出数据,即可参数统计概要;如果通过参数给出模型,则显示模型概要
泛型函数(Generic function)会根据给定参数执行不同动作。
举个例子:运行summary(iris)
summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
#上四分位数:1st Qu
#下四分位数:3rd Qu
接下来举例介绍summaryBy()函数:
summaryBy(Sepal.Width + Sepal.Length ~ Species,iris)
Species Sepal.Width.mean Sepal.Length.mean
1 setosa 3.428 5.006
2 versicolor 2.770 5.936
3 virginica 2.974 6.588
提示: 参数Sepal.Width + Sepal.Length ~ Species称为公式,可以将它理解为一种描述待处理数据的数学公式。"+"连接Sepal.Width与Sepal.Length ,将其相关值以列的形式放入结果。~Species是将Species放入结果的各行。整个过程的意思就是按Species分类后,对Sepal.Width与Sepal.Length 进行汇总统计得到的。
2.2 orderBy()
同样的,与base::order对比介绍。
#返回对数据排序后的各数据的原索引
order(
... #
na.last = TRUE #用于指定NA值最终置于排序结果的位置。默认为真,置于结果的最后
decreasing = FALSE #是否降序排列
)
#根据公式对数据排序
doBy::order_By(
formula #用于指定排序基准的公式
#忽略~的左侧,依据~右侧列出的名称排列数据
data #待排序的数据
)
继续使用鸢尾花数据集:
order(iris$Sepal.Length)
[1] 14 9 39 43 42 4 7 23 48 3 30 12 13 25 31 46 2
[18] 10 35 38 58 107 5 8 26 27 36 41 44 50 61 94 1 18
...
order()函数对指定数据排序后,返回其数据集中索引。
orderBy(~Sepal.Width,iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
61 5.0 2.0 3.5 1.0 versicolor
63 6.0 2.2 4.0 1.0 versicolor
69 6.2 2.2 4.5 1.5 versicolor
120 6.0 2.2 5.0 1.5 virginica
42 4.5 2.3 1.3 0.3 setosa
...
2.3 sampleBy()
#执行数据抽样,返回值为保存样本且长度为size的向量
base::sample(
x #带抽样的数据向量
size #抽样数量
replace = FALSE #是否重复抽样
)
#根据公式将数据分组后,从各分组抽取样本。返回值为数据框
doBy::sampleBy(
formula #
frac = 0.1 #根据~右侧列出的名称,将数据分组
replace #抽取的样本比例,默认值为0.1
data = parent.frame() #要抽取数据的数据框
systematic = FALSE #是否使用系统抽样
)
sample的例子:
sample(1:9,4)
[1] 2 9 5 7
sample(1:9,4,replace = T)
[1] 9 3 6 6
关于replace参数的使用,你明白了吗?
sampleBy()的例子:
sampleBy(~Species,frac = 0.1,data = iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
setosa.7 4.6 3.4 1.4 0.3
setosa.12 4.8 3.4 1.6 0.2
setosa.22 5.1 3.7 1.5 0.4
setosa.42 4.5 2.3 1.3 0.3
setosa.45 5.1 3.8 1.9 0.4
versicolor.53 6.9 3.1 4.9 1.5
versicolor.61 5.0 2.0 3.5 1.0
versicolor.70 5.6 2.5 3.9 1.1
versicolor.74 6.1 2.8 4.7 1.2
versicolor.99 5.1 2.5 3.0 1.1
virginica.101 6.3 3.3 6.0 2.5
virginica.118 7.7 3.8 6.7 2.2
virginica.123 7.7 2.8 6.7 2.0
virginica.130 7.2 3.0 5.8 1.6
virginica.148 6.5 3.0 5.2 2.0
Species
setosa.7 setosa
setosa.12 setosa
setosa.22 setosa
setosa.42 setosa
setosa.45 setosa
versicolor.53 versicolor
versicolor.61 versicolor
versicolor.70 versicolor
versicolor.74 versicolor
versicolor.99 versicolor
virginica.101 virginica
virginica.118 virginica
virginica.123 virginica
virginica.130 virginica
virginica.148 virginica
总结
以上就是今天要讲的内容,看到这里的小伙伴给大恐龙🦖点点赞,点点关注!有问题可以留言交流哦!