Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R排序按组和汇总ddply_R_Pivot Table_Plyr - Fatal编程技术网

R排序按组和汇总ddply

R排序按组和汇总ddply,r,pivot-table,plyr,R,Pivot Table,Plyr,我有一个像这样的数据框 x <- data.frame(Category=factor(c("One", "One", "Four", "Two","Two", "Three", "Two", "Four","Three")), City=factor(c("D","A","B","B","A","D","A","C","C")), Frequency=c(10,1,5,2,14,8,20,3,5)) Category City Frequency 1 One D

我有一个像这样的数据框

x <- data.frame(Category=factor(c("One", "One", "Four", "Two","Two",
"Three", "Two", "Four","Three")),
City=factor(c("D","A","B","B","A","D","A","C","C")),
Frequency=c(10,1,5,2,14,8,20,3,5))

  Category City Frequency
1      One    D        10
2      One    A         1
3     Four    B         5
4      Two    B         2
5      Two    A        14
6    Three    D         8
7      Two    A        20
8     Four    C         3
9    Three    C         5
但我需要这些结果按每个类别组的总数排序。大概是这样的:

ddply(x,.(Category,City),summarize,Total=sum(Frequency))
  Category City Total
1     Four    B     5
2     Four    C     3
3      One    A     1
4      One    D    10
5    Three    C     5
6    Three    D     8
7      Two    A    34
8      Two    B     2
Category City Frequency
1      Two    A        34
2      Two    B         2
3    Three    D        14
4    Three    C         5
5      One    D        10
6      One    A         1
7     Four    B         5
8     Four    C         3

我看了看,试过分类、排序、安排,但似乎什么也做不了。我在R怎么做

这是一个很好的问题,我想不出一个直接的方法来做这件事,而不是创建一个总大小索引,然后按它排序。下面是一个可能的
数据表
方法,它使用
setorder
函数,通过引用对数据进行排序


这是一个基本的R版本,其中
DF
ddply
调用的结果:

with(DF, DF[order(-ave(Total, Category, FUN=sum), Category, -Total), ])
产生:

  Category City Total
7      Two    A    34
8      Two    B     2
6    Three    D     8
5    Three    C     5
4      One    D    10
3      One    A     1
1     Four    B     5
2     Four    C     3
逻辑基本上与David的相同,计算每个
类别的
总数
,对每个
类别
中的所有行使用该数字(我们使用
ave(…,FUN=sum)
),然后按其排序,再加上一些连接断路器,以确保按预期输出内容

with(DF, DF[order(-ave(Total, Category, FUN=sum), Category, -Total), ])
  Category City Total
7      Two    A    34
8      Two    B     2
6    Three    D     8
5    Three    C     5
4      One    D    10
3      One    A     1
1     Four    B     5
2     Four    C     3