【问题标题】:R - Grouping of DataR - 数据分组
【发布时间】:2017-09-07 19:57:29
【问题描述】:

我有以下方式的数据集:

 Incoming_Day  STU_ID
1 2016-04-27 A033548
2 2017-05-18 A034571
3 2017-01-27 A034623
4 2016-01-04 A100170
5 2016-01-05 A100170

我想制作一个数据框,显示每天的学生人数。

我使用了以下代码:

df <- aggregate(data.frame(count = df$STU_ID), list(Incoming_Day= df$Incoming_Day), length); df[1:5,]

但是我得到的结果是每天的观察次数。我确定我在这里犯了一个简单的错误。我该如何纠正它?

【问题讨论】:

  • 请发布预期输出
  • @PoGibas: Incoming_Day No_Of_Students_Registration 1 2016-04-27 3 2 2017-05-18 5 3 2017-01-27 9 4 2016-01-04 6 5 2016-01-05 5 等等上
  • @Raj。您可以使用 dput(df) 从脚本中加载的原始 df 中提取可重现的示例。或者,如果您有一个非常大的样本并且想要获取前 10 行,请使用 dput(head(x = df, n =10))。其中 x 参数用于数据对象,n 用于要采样的行数。

标签: r dataframe aggregate


【解决方案1】:
aggregatedDF <- aggregate(data = df, STU_ID ~ Incoming_Day , 
                          function(x) length(unique(x)) )

【讨论】:

    【解决方案2】:

    尝试使用 function(x) 后跟 length(unique(x)),如下所示:

    aggregate(data.frame(count=df$STU_ID),list(Incoming_Day=df$Incoming_Day),
              function(x) length(unique(x)))
    

    输出:

      Incoming_Day count
    1   2016-01-04     1
    2   2016-01-05     2
    3   2016-04-27     1
    4   2017-01-27     1
    5   2017-05-18     1
    

    样本数据:

    df <- fread("Incoming_Day  STU_ID
                 2016-04-27 A033548
                 2017-05-18 A034571
                 2017-01-27 A034623
                 2016-01-04 A100170
                 2016-01-05 A100170
                 2016-01-05 A100170
                 2016-01-05 A100172")
    

    【讨论】:

    • 为什么必须将变量子集强制转换为列表和数据框?你可以不这样做就完成你的输出。
    • @DataTx - 这是个好问题。确实,根据所需的输出,可以使 aggregate() 语法更简单,就像您的答案一样。我使用的语法有两个主要优点:(1)输出是一个数据帧; (2) 所述数据框的列可以有自定义名称。
    • @RyanRunge:这只是 80000 行中的前 5 个,并且有多个 STU_ID。所以我可以使用任何手动输入的数据值。
    • @Raj - 没问题。无论哪种方式,这都可以作为解决方案。我只是添加了更多示例数据来演示输出。
    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多