R中的分组和排序

时间:2012-06-08 21:35:09

标签: r

我是一名Excel用户,试图将我的一些常规数据报告任务转换为R. Excel中最强大的功能之一是能够对数据进行透视和排序。我知道这些函数也是R中的特性,但我不知道如何编写代码来解决这个特定的分组和排序问题。

基本上,使用R我想采用如下所示的数据集:

Simple Data Set

将其转换为如下所示:

Pivoted Data Set

请注意,最终表格按团队分组,然后按得分点数对摘要数据进行排序。学习如何在R中做到这一点将节省大量时间。

先谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

您需要的两个功能......一旦您有一个示例...... xtabsftable。首先,我们将现有表转换为数据帧,然后注意计数现在位于名为“Freq”的变量中。然后我们将表格重新制成较小的维度:

> Tdf <- as.data.frame(Titanic, stringsAsFactors=FALSE)
> str(Tdf)
'data.frame':   32 obs. of  6 variables:
 $ Class   : chr  "1st" "2nd" "3rd" "Crew" ...
 $ Sex     : chr  "Male" "Male" "Male" "Male" ...
 $ Age     : chr  "Child" "Child" "Child" "Child" ...
 $ Survived: chr  "No" "No" "No" "No" ...
 $ Freq    : num  0 0 35 0 0 0 17 0 118 154 ...

> ftable( xtabs(Freq ~ Class+Sex, Tdf) , row.vars=c("Class", "Sex") )
Class Sex        
1st   Female  145
      Male    180
2nd   Female  106
      Male    179
3rd   Female  196
      Male    510
Crew  Female   23
      Male    862

我没有得到很多分,但我曾经在SO上演示了如何做小计和总计:

R: calculating column sums & row sums as an aggregation from a dataframe

答案 1 :(得分:2)

首先,欢迎来到R和SO。如果您遵循此处发布问题的指导原则,您会发现您会得到更好的答案:

How to make a great R reproducible example?

您可以通过多种方式完成您的要求。

首先,您需要对sum创建的每个分组使用c(Team,Player)函数。有几种方法可以做到这一点:

    基础R中的
  • by,以及as.data.frame.by包中的taRifx
  • {li> ddplyplyr包中

然后获取结果输出并对其进行排序(再次,有很多方法可以做到这一点):

    {li> sorttaRifx包中 {li> arrangeplyr包中

因为听起来你会做很多事情,所以我强烈建议你创建自己的功能,按照你想要的方式自动完成两个步骤。然后,您可以将该功能放在.Rprofile或包中,以便它始终可用。