R实现分组汇总的几种办法

合集下载

R实现分组汇总的几种办法

R实现分组汇总的几种办法

R实现分组汇总的⼏种办法分组汇总是对⼆维结构化数据中的某个字段(或多个字段)分组,并对组内字段进⾏汇总的算法,下⾯的例⼦将展⽰R语⾔实现分组汇总的⼏种办法。

为了更加通⽤,例⼦中的分组字段是2个,汇总算法也是2种。

案例描述:请将数据框orders按照CLIENT和SELLERID分组,并在组内对AMOUNT字段分别求和、求最⼤值。

说明:orders存储着订单记录,其来源可以是数据库也可以是⽂件,⽐如:orders<-read.table("sales.txt",sep="\t", header=TRUE)。

其前⼏⾏数据如下:ORDERID CLIENT SELLERID AMOUNT ORDERDATE1 1 WVF Vip 5 440.0 2009-02-032 2 UFS Com 13 1863.4 2009-07-053 3 SWFR 2 1813.0 2009-07-084 4 JFS Pep 27 670.8 2009-07-085 5 DSG 15 3730.0 2009-07-09⽅法1:aggregate函数代码:result1<-aggregate(orders$AMOUNT, orders[,c("SELLERID","CLIENT")],sum)result2<-aggregate(orders$AMOUNT, orders[,c("SELLERID","CLIENT")],max)result<-cbind(result1,result2$x)部分计算结果:SELLERID CLIENT x result2$x87 16 OLF 780.6 625.288 19 OLF 144.8 144.889 24 OLF 1191.2 1191.290 5 PAER 1414.8 1414.891 6 PAER 2545.2 2545.2代码解读:1.从名字就可以看出,aggregate是专⽤于分组汇总的函数,它的输⼊参数和计算结果都是数据框,⽤法相对简单。

r语言分组汇总的公式

r语言分组汇总的公式

r语言分组汇总的公式R语言是一种功能强大的编程语言,常用于数据分析和统计建模。

其中,分组汇总是数据分析中常用的操作之一。

在R语言中,我们可以使用一些函数来实现分组汇总的操作,本文将介绍其中的一些常用函数和方法。

我们需要了解一下什么是分组汇总。

在数据分析中,我们经常需要对数据进行分组,并对每个组内的数据进行汇总统计。

例如,我们可能需要计算不同地区的销售额总和,或者计算每个月的平均温度等。

这就是分组汇总的基本思想。

在R语言中,我们可以使用`group_by()`函数对数据进行分组操作。

这个函数需要一个或多个变量作为参数,用于指定分组的依据。

例如,我们可以使用以下代码将数据按照地区进行分组:```Rgrouped_data <- group_by(data, area)```这样,我们就将数据按照地区进行了分组,并将结果保存在了`grouped_data`中。

接下来,我们可以对每个组内的数据进行汇总操作。

对于分组汇总,我们经常使用的函数是`summarize()`。

这个函数可以对每个组内的数据进行汇总统计,并返回一个包含统计结果的数据框。

例如,我们可以使用以下代码计算每个地区的销售额总和:```Rsummarized_data <- summarize(grouped_data, total_sales = sum(sales))```这样,我们就得到了一个包含每个地区销售额总和的数据框,其中的`total_sales`列存储了统计结果。

需要注意的是,我们可以在`summarize()`函数中使用其他的汇总函数,例如`mean()`计算平均值、`max()`计算最大值等。

除了`summarize()`函数外,我们还可以使用`mutate()`函数对每个组内的数据进行变换操作。

这个函数和`summarize()`函数类似,但是它会保留分组的结构,并返回一个与原数据框具有相同行数的数据框。

例如,我们可以使用以下代码计算每个地区的销售额占比:```Rmutated_data <- mutate(grouped_data, sales_ratio = sales / sum(sales))```这样,我们就得到了一个包含每个地区销售额占比的数据框,其中的`sales_ratio`列存储了计算结果。

R实现固定分组汇总的方法

R实现固定分组汇总的方法
$r14 [1] 134161.9
$r2 [1] 85969
$r3 [1] 142591.1
说明:r2 和 r3 包含了 r14 的部分数据。 代码解读 1. 上述代码可以解决本案例,但已经显得很麻烦了,如果条件更多更复杂,上面的代码将
会更长。 2. 这里用到了一个新的数 lapply。迄今为止,为了实现固定分组,我们已经使用了很多
可以实现本案例,但代码复杂稍显复杂。
第三方解决方案
本案例也可以用 Python、集算器、Perl 等语言来实现。和 R 语言一样,这几种语言都可
以实现固定分组汇总和结构化数据的计算,下面简单介绍集算器的解决方案。
案例 1:
byFac=["ARO","BON","CHO"]
grouped=sales.align@a(byFac, CLIENT)
3. ZTOZ 的汇总值是 NA,这说明 ZTOZ 不在 CLIENT 列中。如果 ZTOZ 的汇总值为 0,则说明
ZTOZ 在 CLIENT 列中,但订单金额为 0。 4. 本案例中,分组汇总的结果只有四组,多余的客户不应该出现,这些客户可以称为“多
余组”。计算多余组的汇总值不能在当前算法上简单改造,需要使用新的函数:
byFac<-factor(sales$CLIENT,levels=c("ARO","BON","CHO","ZTOZ"))
result<-aggregate(sales$AMOUNT,list(byFac),sum)
上述代码的计算结果是:
Group.1
x
1 ARO 899.0

R语言实现data.frame分组计数、求和等

R语言实现data.frame分组计数、求和等

R语⾔实现data.frame分组计数、求和等df为1个data.frame对象,有stratum和psu两列,这⾥统计stratum列计数⽅法1:cnt = table(df$stratum)⽅法2:cnt = tapply(df$psu, INDEX=df$stratum, FUN=length)在⽅法2的基础上,只要改变FUN函数就可以实现分组求和、求均值等功能,如下分组求均值:tapply(df$psu, INDEX=df$stratum, FUN=mean)#(等价于python中的df.groupby('stratum').psu.mean)补充:R语⾔ | ⾃定义函数对数据集(data.frame)的列进⾏条件判断计算1.使⽤iris数据集> iris_10 <- head(iris, n = 10)## ⾃定义函数:如果x >= 5.0, z = y *10> get_With_function <- function(x, y, z){+ if(x >= 5.0){+ z <- y * 10+ }+ c(zlie = z )+ }2.保险起见,设定z列为0,可能也不需要> iris_10$z <- 03.运⽤⾃定义函数,对data.frame的x⾏进⾏判断,对y列进⾏运算,赋值到z列4…注意Map的使⽤> iris_10$z <- with(+ iris_10,+ Map(+ get_With_function,+ iris_10$Sepal.Length,+ iris_10$Sepal.Width,+ z+ )+ )> iris_10Sepal.Length Sepal.Width Petal.Length Petal.Width1 5.1 3.5 1.4 0.22 4.9 3.0 1.4 0.23 4.7 3.2 1.3 0.24 4.6 3.1 1.5 0.25 5.0 3.6 1.4 0.26 5.4 3.9 1.7 0.47 4.6 3.4 1.4 0.38 5.0 3.4 1.5 0.29 4.4 2.9 1.4 0.210 4.9 3.1 1.5 0.1Species z1 setosa 352 setosa 03 setosa 04 setosa 05 setosa 366 setosa 397 setosa 08 setosa 349 setosa 010 setosa 0以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

等分法分组r语言

等分法分组r语言

等分法分组r语言
(原创版)
目录
1.等分法分组概述
2.R 语言简介
3.使用 R 语言实现等分法分组的步骤
4.实例演示
正文
一、等分法分组概述
等分法分组是指将一组数据按照某个特征分成若干组,每组的数据量相等或者基本相等。

这种分组方法在数据分析中非常常见,可以有效地帮助我们挖掘数据中的规律和特征。

二、R 语言简介
R 语言是一种功能强大的数据处理和统计分析语言,它被广泛应用于数据分析、可视化、建模等领域。

R 语言的优点在于其丰富的库和扩展包,使得用户可以轻松地完成各种复杂的数据处理任务。

三、使用 R 语言实现等分法分组的步骤
1.安装并加载所需的 R 包:例如,如果需要进行等分法分组,可以使用“dplyr”和“ggplot2”包。

2.读取数据:使用“read.csv”、“read.xlsx”等函数读取数据。

3.数据处理:使用 R 语言的各种函数对数据进行清洗、筛选、转换等操作,以便后续的分组。

4.等分法分组:使用“group_by”函数对数据进行分组,然后使用“do”函数或者“mutate”函数对分组后的数据进行汇总或者转换。

5.分组结果分析:使用“summarise”、“describe”等函数对分组结果进行分析。

6.可视化:使用“ggplot2”包的各种函数对分组结果进行可视化展示。

四、实例演示
假设我们有一份关于学生成绩的数据,我们希望按照学生的性别进行等分法分组,然后计算每个性别的平均成绩。

R语言-分组统计

R语言-分组统计
1 female 15.08035 0.54 2 male 16.01377 0.76
可选参考:
library(dplyr)
group_by(data, sex) %>% summarize_each(funs(mean), var1, var2, var3...)
1 female 15.08035 0.54 2 male 16.01377 0.76
score[,c(2,3)] 表示对score1和score2列进行分组统计
list(score[,4])表示根据score第4列,也就是性别列进行分组统计。
mean表示统计平均值。
也可以写作下面的形式:
> aggregate(score[,c(2,3)],list(score$Gender),mean) Group.1 score1 score2
1 101 11.35321 0.9 male 2 102 12.58654 0.6 male 3 103 19.79380 0.9 female 4 104 12.01352 0.4 female 5 105 11.97081 0.4 female 6 106 17.37480 0.7 female 7 107 14.24884 0.3 female 8 108 18.47972 0.8 male 9 109 18.74792 0.8 male 10 110 18.90146 0.7 male
2、 方 法 : 使 用 aggregate(x, by, FUN)
其中x是待折叠的数据对象,by是一个变量名组成的列表,这些变量将被去掉以形成新的观测,而FUN则是用来计算描述性统计量的标量函 数,它将被用来计算新观测中的值。
> aggregate(score[,c(2,3)],list(score[,),mean) Group.1 score1 score2

r语言统计一列中各类别数量

r语言统计一列中各类别数量

r语言统计一列中各类别数量
R语言是一门功能强大的统计语言,其中有一个很重要的知识点就是统计一列中各类别数量。

统计一列中各类别数量,可以使用R语言中的常用数据处理函数,例如str()、table()、aggregate()等函数。

首先,我们让R语言使用str()函数,对一列中的各类别进行提取,以便统计之后更清楚的知道这列中的各类别的情况。

str()函数的功能是将数据打印出相应的部分,如果它作用于字符或储存在字符变量中的数据,更加简单和安全。

str()函数统计完成之后,就可以得到每列中分别表示的类别了。

其次,使用R语言中的table()函数进行统计,table()函数非常实用,主要用于对离散变量进行计数汇总,是一种有效的统计类别的方法。

只需将原数据作为参数传入table()函数,就可以得到一列中各分类的数量,便于我们进行更深入的分析。

最后,R语言中还包含aggregate()函数,它的功能相当强大,主要用于计算分组变量以及数值变量的均值、标准差、中位数、最大值等统计描述。

使用这个函数,我们可以得出一列中各类别的平均数,方差,最小值,最大值等统计数据。

通过以上三个函数,R语言用户可以统计出列中不同类别的数量,进而进行更深入的分析。

未来,R语言数据处理函数可以有所改进,使用更加方便,使用者可以更加清楚的知道一列中所
有类别的数量情况。

只有通过不同的统计函数,我们可以更加清楚的掌握数据,从而做出更好的决策。

R语言之数据汇总

R语言之数据汇总

我们在分析数据的时候,除了数据结构上的调整之外,很多时候也需要将数据进行汇总处理,比如最简单的计算行列均值、方差等,同时,数据汇总的结果也可以帮助进行一些实验设计和可视化显示,下面我们说一下如何使用R进行数据汇总处理。

一、简单的行列汇总1.可以使用colMean()、colSums()对列计算均值和求和,使用rowSMean()、rowSums()对行计算均值和求和,这里我们可以使用[]或:选择数据的一部分,如果行或列没有设置名称,则会结果也会是一行没有命名的数字,如果数据中包含NA项,那么结果也会是NA,对此,可以设置na.rm=TRUE选项屏蔽NA。

2.apply()命令该命令将一个汇总函数应用到所选择的数据框或矩阵的所有列,格式为:apply(X,MARGIN,FUN,...)其中X为所选择的数据区域,MARGIN=1为行,=2为列,FUN为汇总函数,也可以使用na.rm=TRUE来屏蔽NA项。

二、复杂的汇总函数这里的复杂,指的是数据结构的复杂,比如数据中包含多个分类变量的情况。

1.rowsum()命令该命令可计算数据框或矩阵的行的合计,它有一个group选项,用于选择分组变量,但是只能选择一个分组变量,对于多分组变量的数据不适用2.tapply()命令该命令可以作用于多分组变量情况下,但是用于汇总的向量只能选择一个,如:> tapply(mf$Length,mfsite,FUN=sum)第一个选项为汇总向量,第二个为分组向量,如果存在多个分组向量,可使用list()指定:> tapply(mf$Length,list(mfsite1,mf$site2),FUN=sum)如果指定的分组变量超过2个,则结果会被细分为多个二维表。

3.aggregate()命令该命令的通用格式如下:aggregate(X,by,FUN...)X为要汇总的数据,by为分组变量,必须使用list()命令指定,FUN为汇总函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

R实现分组汇总的几种办法
分组汇总是对二维结构化数据中的某个字段(或多个字段)分组,并对组内字段进行汇总的算法,下面的例子将展示R语言实现分组汇总的几种办法。

为了更加通用,例子中的分组字段是2个,汇总算法也是2种。

案例描述:
请将数据框orders按照CLIENT和SELLERID分组,并在组内对AMOUNT字段分别求和、求最大值。

说明:orders存储着订单记录,其来源可以是数据库也可以是文件,比如:
方法1:aggregate函数
代码:
result1<-aggregate(orders$AMOUNT, orders[,c("SELLERID","CLIENT")],sum)
result2<-aggregate(orders$AMOUNT, orders[,c("SELLERID","CLIENT")],max)
result<-cbind(result1,result2$x)
代码解读:
1.从名字就可以看出,aggregate是专用于分组汇总的函数,它的输入参数和计算结果都
是数据框,用法相对简单。

2.aggregate函数不能对分组后的数据进行多种汇总计算,因此要用两句代码分别实现sum
和max算法,最后再用cbind拼合。

显然,上述代码在性能和易用性上存在不足。

3.aggregate函数对分组字段的顺序有一个奇怪的要求:必须反向排列。

鉴于这个怪要求,
先对CLIENT分组再对SELLERID分组就必须写成:orders[,c("SELLERID","CLIENT")]。

如果按照正常的思维习惯写代码,结果将是错误的。

4.不仅代码的写法违反正常的思维习惯,计算后的结果也很怪异:SELLERID字段会排在
CLIENT之前。

事实上,为了使计算结果更符合业务逻辑,上述的代码还要继续加工才行。

总结:
aggregate函数勉强可用,但在性能和方便性上存在不足,代码的写法、计算结果、业
务逻辑这三者不一致。

方法2:split+lapply函数
代码:
sp<-split(orders,orders[,c("SELLERID","CLIENT")],drop=TRUE)
result1<-lapply(sp,FUN=function(x) sum(x$AMOUNT))
result2<-lapply(sp,FUN=function(x) max(x$AMOUNT))
result<-cbind(result1,result2)
部分计算结果
1.Split函数的作用是将数据框按照指定字段分组,但不做后续计算。

lapply函数可以对每
组数据都执行同样的算法。

Split和lapply两者结合可以实现本案例。

2.由于分组后的数据可以复用,因此本算法比aggregate性能更高。

pply函数也不支持多种统计方法,因此也要用两句代码分别实现sum和max算法,
最后再用cbind拼合。

另外,本算法还要额外用到split函数,因此在易用性上没有改进,反而是更差了。

4.分组顺序仍然要违反正常的思维习惯,必须反写成:orders[,c("SELLERID","CLIENT")]。

5.计算结果需要大幅加工,很不方便。

可以看到,计算结果中的第一列实际上是
“SELLERID.CLIENT”,我们需要把它拆分成两列并调换顺序才行。

总结:
本算法在性能上有所提高,但在易用性上明显不足,在代码写法、业务逻辑、计算结果上仍然存在不一致。

Lapply是apply函数族的一份子,类似的函数还有sapply和tapply。

其中sapply的用法和lapply的区别只在参数上,如下:
sp<-split(orders,orders[,c("SELLERID","CLIENT")],drop=TRUE)
result1<-sapply(sp,simplify=FALSE,FUN=function(x) sum(x$AMOUNT))
result2<-sapply(sp,simplify=FALSE,FUN=function(x) max(x$AMOUNT))
result<-cbind(result1,result2)
tapply专用于数据框,按理说最适合解决本案例,但事实并非如此。

tapply只对单字段分组适用,在进行双字段联合分组时其结果为二维矩阵,用户还需要进行复杂的处理才行,比如tapply(orders$AMOUNT, orders[,c("SELLERID","CLIENT")],function(x) sum(x)),这句代码的计算结果是:
第三方库函数
用R的内置函数进行分组汇总会存在各种缺点,这时可以考虑用第三方库函数,比如Reshape、stack等。

这些第三方库函数的稳定性和计算效率一般不如内置函数,而且资料较少,实现本案例有一定的难度。

这里就不再一一列举了。

第三方语言
本案例也可以用Python、集算器、Perl等语言来实现。

和R语言一样,这几种语言都可以实现分组汇总以及结构化数据的计算,下面简单介绍集算器和Python的解决方案。

集算器
集算器只需使用groups函数就是实现本案例,语法简洁易懂,符合正常的思维习惯,代码如下:
result=orders.groups(CLIENT,SELLERID;sum(Amount),max(Amount))
Python(pandas)
如果用Python的内置函数直接实现本案例,代码将相当复杂,所以这里用第三方函数库pandas来解决。

pandas先用groupby函数来进行分组运算,再用agg函数来进行汇总计算,比R语言简练,但比集算器还略有不足,代码如下:
result= orders.groupby(['CLIENT','SELLERID']).agg({'AMOUNT':[sum,max]})
pandas的计算结果、语法、业务逻辑高度一致,部分计算结果如下:
分组结果复用时就可以提高性能。

集算器也支持分步计算,等价的代码是:group(CLIENT,SELLERID).new(CLIENT,SELLERID,sum(AMOUNT),max(AMOUNT))。

相关文档
最新文档