1

我有一个带有来自票务跟踪系统的任务分配的 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"
4

1 回答 1

1

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

诀窍是在指定为函数参数的summarize函数中,您将它们称为裸词;Assignments$Assignee应该叫 just 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
于 2013-05-23T14:27:43.817 回答