【发布时间】:2016-06-03 11:40:06
【问题描述】:
我有一组这样的数据
project,file,line,mutant,killstatus,commitid,isbug
p1,f1,100,NMC,killed,abc123,yes
p1,f1,100,VMC,alive,abc123,yes
p1,f1,200,NVM,alive,ab12de,no
p1,f1,200,NVM,alive,abcde1,yes
p1,f1,200,NVM,alive,abcde2,yes
我想按项目、文件、行进行分组并总结为
project,file,line,total.mutants,killed.mutants,total.commits,bugfix.commits
p1,f1,100,2,1,1,1
p1,f1,200,1,0,3,2
即对于每个project,file,line组合,total.mutants的长度是(mutant,killstatus)的唯一计数,killed.mutants是前一对killed的计数。同样,total.commits 是 (commitid,isbug) 的唯一计数,bugfix.commits 是前一对中 yes 的计数。
澄清:
对于p1,f1,100,有两个独特的突变体,killstatus 对(NMC,killed),(VMC,alive),其中一个被杀死。因此2,1 总计,被杀
对于p1,f1,200,只有一个独特的突变体,killstatus 对(NVM,alive) 是活着的。因此,1,0 总计被杀
对于p1,f1,100,有一个唯一的commitid,是错误对(abc123,yes),这是一个错误。因此1,1 总计,错误修复
对于p1,f1,200,有三个唯一的commitid,isbug 对(ab12de,no),(abcde1,yes),(abcde2,yes),其中两个是bug。因此3,2 总计,错误修复
我可以使用 dplyr 一口气总结吗?我设法做到了第一个部分喜欢
data %>% group_by(project,file,line) %>% summarize(
total.mutants = length(killstatus),
killed.mutants = sum(ifelse(killstatus == 'alive', F, T))
)
但我不知道如何做独特的部分和第二部分。
【问题讨论】:
-
应该有 1 个错误修复提交,第一行总共提交 1 个 (100),第二行总共 3 个提交中有 2 个错误修复提交 (200)