第四章:数据操作Ⅰ 第六节:数据分组并调用函数

数据分析中,对全体数据调用函数进行处理的情形并不多见,更多的是先将全体数据进行分组,然后针对每个分组调用函数进行处理,因此我们这里学习使用doby包进行数据分组

在使用之前,我们需要安装doby包才行

一、summaryBy()

summaryBy()函数用于对数据进行分组,并计算描述性统计量。同时,我们R语言中自带的base包提供了summary()函数,即base()::summary

Summary()是一个泛型函数,用于查看数据统计的需要,泛型函数会根据指定参数执行不同的动作,对于summary()函数而言,通过参数给出数据,即可产生统计摘要,若通过参数给出模型,则显示模型摘要

例如,我们使用summary()函数探查鸢尾花数据的统计摘要

> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species 
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50 
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50 
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50 
 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  

如上图所示,对于Sepal.Length等数值型数据,使用summary()函数可以显示其最小值,上四分位数,中位数、平均值、下四分位数,最大值等数据,而对于因子向量,如Species,则显示各个水平

summaryBy函数用于依赖特定条件对想要的列值进行汇总统计,

例如,我们现在想要根据Species查看Sepal.Length,Sepal.width

> 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被称为公式

二、orderBy()

orderBy()函数对数据框进行排序,但orderBy()函数不具分组数据的功能,其对应base包里的order函数

Order()函数对指定数据排序后,其返回数据集中的索引,借助这些索引可以获得排序后的数据,例如,我们对Sepal.Length值对鸢尾花数据进行升序排序

> order(iris$Sepal.Length)
  [1]  14   9  39  43  42   4   7  23  48   3  30  12  13  25  31  46   2  10  35  38  58…….

然后根据返回的索引,我们就可以根据索引来对鸢尾花数据进行排序

> iris[order(iris$Sepal.Length),]
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
14           4.3         3.0          1.1         0.1     setosa
9            4.4         2.9          1.4         0.2     setosa
39           4.4         3.0          1.3         0.2     setosa
43           4.4         3.2          1.3         0.2     setosa
42           4.5         2.3          1.3         0.3     setosa
4            4.6         3.1          1.5         0.2     setosa
7            4.6         3.4          1.4         0.3     setosa

如果想要以多个列做数据排序的基准,只要将相关列作为参数传递给order()函数即可

orderBy()函数与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
54           5.5         2.3          4.0         1.3 versicolor

 

或者利用公式根据指定两列进行排序

三、sampleBy()

sampleBy()函数会先对数据进行分组,然后从各分组中抽取样本

Sample()用于给指定样本进行抽样,其中参数replace用于设置是否重复抽样,默认值为False,即不重复抽样。

例如

> sample(1:10,5)
[1]  5  7 10  8  4
> sample(1:10,5,replace=TRUE)
[1] 2 5 6 7 7

#可以看到7被抽取了2次

Sample函数还可以进行对数据的随机混合

例如

> sample(1:10,10)
 [1] 10  1  9  7  5  2  4  6  8  3

因此,我们可以使用Sample()函数从给定数据中选取训练数据和测试数据,但如果想要对模型准确性有较好的评估,就需要根据预测对象的不同值进行均一采样。此时,使用sampleBy()函数就十分有效

例如

> sampleBy(~Species,frac=0.1,data=iris)
              Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
setosa.6               5.4         3.9          1.7         0.4     setosa
setosa.15              5.8         4.0          1.2         0.2     setosa
setosa.24              5.1         3.3          1.7         0.5     setosa
setosa.25              4.8         3.4          1.9         0.2     setosa
setosa.38              4.9         3.6          1.4         0.1     setosa
versicolor.54          5.5         2.3          4.0         1.3 versicolor
versicolor.62          5.9         3.0          4.2         1.5 versicolor
versicolor.68          5.8         2.7          4.1         1.0 versicolor
versicolor.78          6.7         3.0          5.0         1.7 versicolor
versicolor.94          5.0         2.3          3.3         1.0 versicolor
virginica.115          5.8         2.8          5.1         2.4  virginica
virginica.116          6.4         3.2          5.3         2.3  virginica
virginica.118          7.7         3.8          6.7         2.2  virginica
virginica.129          6.4         2.8          5.6         2.1  virginica
virginica.134          6.3         2.8          5.1         1.5  virginica

鸢尾花数据集的Sepal.width,Sepal.Length、Petal.Width、Petal.Length数据,建立用于预测Species的模型,若训练数据只有setosa,测试数据只含有vericolor与virginica,就无法建立准确的模型,也就无法对模型进行准确的评估,因此,需要测试和训练数据在不同Species下均一,因此SampleBy()就很重要

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值