【问题标题】:Use plyr to summarize a data.frame and get counts of each unique item使用 plyr 汇总 data.frame 并获取每个唯一项目的计数
【发布时间】:2013-05-23 14:27:43
【问题描述】:

我有一个 data.frame,其中包含来自工单跟踪系统的任务分配。

Assignments <- data.frame('Task'=c(1, 1, 2, 3, 2, 2, 1), 'Assignee'=c('Alice', 'Bob', 'Alice', 'Alice', 'Bob', 'Chuck', 'Alice'))

我需要汇总一些月度报告的数据。这是我目前所拥有的:

ddply(Assignments, 'Task', 
      summarize, 
      Assignee.Count=length(Assignee), 
      Unique.Assignees.Involved=length(unique(Assignee)),
      Assignees.Involved=paste(Assignee, sep=", ", collapse=", "))

这让我很着迷:

  Task Assignee.Count Unique.Assignees.Involved Assignees.Involved
1    1              3                         2  Alice, Bob, Alice
2    2              3                         3  Alice, Bob, Chuck
3    3              1                         1              Alice

在 Assignees.Involved 列中,我想进一步总结数据。在第 1 行,我希望它说“Alice 2,Bob 1”。我觉得我需要使用其他一些 plyr 方法来获取每个任务的受让人,对它们进行排序,然后通过 rle 函数运行它们,并将长度和值粘贴在一起。我不知道如何在汇总函数中做到这一点。

这是整个data.frame的结果:

paste(rle(as.vector(sort(Assignments$Assignee)))$values,
      rle(as.vector(sort(Assignments$Assignee)))$lengths,
      sep=" ", collapse=", ")

结果:

[1] "Alice 4, Bob 2, Chuck 1"

【问题讨论】:

    标签: r grouping plyr run-length-encoding


    【解决方案1】:

    我在发布问题时发现了这一点:)

    诀窍在于,在指定为summarize 函数的参数的函数中,您将它们称为裸词; Assignments$Assignee 应该被称为 Assignee,没有数据框,没有引号等。

    所以一旦我发现rle 函数可以将我带到我需要的地方,我就有了我需要的东西。

    ddply(Assignments, 'Task', 
          summarize, 
          Assignee.Count=length(Assignee), 
          Unique.Assignees.Involved=length(unique(Assignee)), 
          Assignments=paste(rle(as.vector(sort(Assignee)))$values, 
                            rle(as.vector(sort(Assignee)))$lengths, 
                            sep=" ", collapse=", "))
    

    给予:

      Task Assignee.Count Unique.Assignees.Involved             Assignments
    1    1              3                         2          Alice 2, Bob 1
    2    2              3                         3 Alice 1, Bob 1, Chuck 1
    3    3              1                         1                 Alice 1
    

    【讨论】:

    • 谢谢!我试过了,rle() 抱怨“x”必须是原子向量。我的 version.string 是 R 版本 3.0.0 (2013-04-03)
    • 抱歉,是的,法律要求我忘记我每周至少使用stringsAsFactors = FALSE 运行 R 一次。如果该列是字符向量而不是因子,则不需要 as.vector
    • 我是 R 新手,总是被它绊倒。在我的数据集(主要是 IT 安全指标)中,有时我希望字符串作为因素,有时作为字符串,这于事无补。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多