我有一个如下数据集。现在我的问题很多了。对于客户端,任务和子任务的每个组合,我想排除前10%的极值。我希望输出2个数据集,一个具有所有组合的极值,另一个是所有组合的正常值。
client task subtask time
a abc t1 12
a abc t2 23
b xyz t3 334
c ijk t1 1
c ijk t1 12
b xyz t1 12
a xyz t2 23
b ijk t3 24
a ijk t2 344
c xyz t3 34343
b ijk t2 34
c xyz t3 34
a xyz t1 23
c ijk t1 223
a ijk t1 23
b xyz t3 21
b ijk t1 45
a xyz t2 23
c ijk t3 45
答案 0 :(得分:2)
您可以使用quantile
查找10%的最高值:
DF <- within(DF,
extreme <- ave(time, #your values
client, task, subtask, #grouping factors
FUN = function(x) x > quantile(x, 0.9)))
然后使用子集来提取所需的值。
答案 1 :(得分:0)
您还可以使用dplyr
包来加快速度。
DF %>%
group_by(client, task, subtask) %>%
mutate(extreme = time > quantile(time, .9))