使用聚合函数重复数据帧

时间:2013-09-02 13:29:26

标签: r dataframe

我有一个数据框,如下所示。我想删除重要元组(ParameterValue)的重复出现,并选择最小mse的那个。

> df
              mse     Parameter Value
    1    25.86760 Training_size   100
    2     8.42944 Training_size   200
    3    58.80860 Training_size   300
    4    34.37760 Training_size   400
    5    99.61530 Training_size   500
    6    19.77290 Training_size   600
    7    24.76670 Training_size   700
    8   587.96900 Training_size   800
    9   538.02500 Training_size   900
    10   60.39630 Training_size  1000
    11  137.07600 Training_size  2000
    12   62.05740 Training_size  3000
    13    8.44762 Training_size   200
    14    8.44610 Training_size   200
    15    8.44871 Training_size   200
    16    8.42939 Training_size   200
    17   11.78550 Training_size   200
    18   11.78520 Training_size   200
    19 1726.44000 Training_size   200
    20 1726.44000 Training_size   200
    21 1726.43000 Training_size   200
    22    8.42939 Training_size   200
    23    8.42942 Training_size   200
    24    8.42939 Training_size   200
    25    8.42938 Training_size   200

我想改为:

              mse     Parameter Value
    1    25.86760 Training_size   100
    3    58.80860 Training_size   300
    4    34.37760 Training_size   400
    5    99.61530 Training_size   500
    6    19.77290 Training_size   600
    7    24.76670 Training_size   700
    8   587.96900 Training_size   800
    9   538.02500 Training_size   900
    10   60.39630 Training_size  1000
    11  137.07600 Training_size  2000
    12   62.05740 Training_size  3000
    25    8.42938 Training_size   200

我该怎么做?

3 个答案:

答案 0 :(得分:3)

如果您想用于大数据,那么您可以考虑使用data.table

library(data.table)
DT <- as.data.table(mydata)
setkey(DT,Parameter,Value)  # optional, for further speed
DT[,min(mse),by="Parameter,Value"]
        Parameter Value        V1
 1: Training_size   100  25.86760
 2: Training_size   200   8.42938
 3: Training_size   300  58.80860
 4: Training_size   400  34.37760
 5: Training_size   500  99.61530
 6: Training_size   600  19.77290
 7: Training_size   700  24.76670
 8: Training_size   800 587.96900
 9: Training_size   900 538.02500
10: Training_size  1000  60.39630
11: Training_size  2000 137.07600
12: Training_size  3000  62.05740

答案 1 :(得分:2)

在基地

中使用aggregate功能
> aggregate(.~Value+Parameter, data=df, FUN=min)
   Value     Parameter       mse
1    100 Training_size  25.86760
2    200 Training_size   8.42938
3    300 Training_size  58.80860
4    400 Training_size  34.37760
5    500 Training_size  99.61530
6    600 Training_size  19.77290
7    700 Training_size  24.76670
8    800 Training_size 587.96900
9    900 Training_size 538.02500
10  1000 Training_size  60.39630
11  2000 Training_size 137.07600
12  3000 Training_size  62.05740

答案 2 :(得分:0)

我认为'删除重复元组重复出现的过程(Parametervalue)的过程包含在“选择具有最小mse”的过程中。真的(如果我已经正确理解的话)你只想为mseParameter的每个独特组合构建一个包含value最小值的数据框。 (注意,元组不是R中定义的数据类型。

plyr包非常适合这种情况。

require(plyr)
ddply(df, c("Parameter", "value"), summarise, min(mse))