2015-03-10 3 views
-2

Я следующий набор данных,Выбор строки с в R

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 пакет, если это возможно.

+2

Не совсем понятно, что вы хотите. Похоже, вы просто уронили столбец? Для этого вам, разумеется, не нужно. – Thomas

+3

Вы что-нибудь пробовали? Где-то застрял? –

+1

Пожалуйста, напишите код, который вы пробовали в вопросе, с результатом, который вы получили с ним, чтобы мы могли рассказать вам, что не так с вашим кодом. См. [Какие темы можно задать здесь?] (Http://stackoverflow.com/help/on-topic). – mins

ответ

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), ] 
Смежные вопросы