我有一个带票务跟踪系统任务分配的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
方法为每个任务选择Assignees,对它们进行排序,然后通过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"
答案 0 :(得分: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