在R中选择行

时间:2015-03-10 18:47:55

标签: r plyr dplyr

我有以下数据集,

   Type Model.rmsep Model.r2pred variable     value
1 train      Linear       Linear    RMSEP 0.1067979
2  test   PLS.Comp7    PLS.Comp7    RMSEP 0.1008264
3    cv  PCR.Comp17   PCR.Comp16    RMSEP 0.1227625
4 train      Linear       Linear   R2pred 0.9190042
5  test   PLS.Comp7    PLS.Comp7   R2pred 0.9143945
6    cv  PCR.Comp17   PCR.Comp16   R2pred 0.8916413

我想从第二列中选择那些对于每个RMSEP最多Type的行以及来自第三列的那些对于每个R2pred具有最大Type的行。我想绑定结果并得到如下所示的内容:

   Type       Model variable     value
1 train      Linear    RMSEP 0.1067979
2  test   PLS.Comp7    RMSEP 0.1008264
3    cv  PCR.Comp17    RMSEP 0.1227625
4 train      Linear   R2pred 0.9190042
5  test   PLS.Comp7   R2pred 0.9143945
6    cv  PCR.Comp16   R2pred 0.8916413

如果可能,最好使用plyr包。

1 个答案:

答案 0 :(得分:0)

首先,这是一个游戏数据集:

play.data <- as.data.frame(matrix(nrow=1000, ncol=3))
names(play.data) <- c("Type", "variable", "value")
play.data$Type<- sample(x=c("train", "test", "cv"), size=1000, replace=TRUE, prob=c(.5, .25, .25))
play.data$variable <- sample(x=c("RMSEP", "R2pred"), size=1000, replace=TRUE, prob=c(.5, .5))
play.data$value <- runif(1000)

现在只需使用ddply,然后按您所需的顺序排序。

## Now get the max 
max.data <- ddply (play.data,.(Type, variable), summarize, max_value=max(value))
max.data <- max.data[order(max.data$variable), ]