如何在R中使用聚合保持列不受影响

时间:2017-02-03 10:55:15

标签: r dataframe aggregate

我有一个大型数据框,其中包含不同参数的实验。每个参数组合都有几个执行:

PROFILE TIME   NTHREADS PARAM1 PARAM2 PARAM3
prof1   3.01   1        4      10     1
prof1   2.90   1        4      10     1
prof1   3.02   1        4      10     1
prof1   1.52   1        4      10     2
prof1   1.60   1        4      10     2
...

我正在使用聚合来获得每个配置文件和组合的最佳时间。来确定nthreads:

data_aggregated <- aggregate(data$TIME, 
                             by = list(PROFILE = data$PROFILE, 
                                       NTHREADS = data$NTHREADS), 
                             FUN = min)

返回一个像这样的新数据框:

PROFILE NTHREADS TIME
prof1   1        1.52
prof1   2        0.9
prof2   1        1.41
prof2   2        0.88
...

我想要的是在每种情况下获得聚合行的PARAM1,PARAM2,PARAM3 的值(具有最小时间的那个)。现在,我在第一个数据帧中查找PROFILE,TIME和NTHREADS等于第二个数据帧中的行,但是可能有更简单的方法吗?

3 个答案:

答案 0 :(得分:2)

或者,使用dplyr

library(dplyr)
dat <- dat %>% 
    group_by(PROFILE, NTHREADS) %>% 
    filter(TIME == min(TIME))

答案 1 :(得分:0)

最后,我完成了Ronak Shah的评论。 Iff两个数据框共享列名称和值(因为使用MIN而不是MEAN聚合),最简单的解决方案是:

data_aggr <- merge(data_aggr, data)

答案 2 :(得分:0)

考虑[class*="shops__item"] { background: black; } ,这是在不同级别的因素之间进行汇总的方法。您可以将多个分组作为单独的参数传递:

const destroyer = (arr, ...args) => arr.filter(value => args.indexOf(value) === -1);
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3);