Сортировка значений в для построения в R - PullRequest
0 голосов
/ 12 марта 2012

У меня есть данные, которые выглядят так:

> print(dat)
    cutoff  tp    fp
1    0.6    414 45701
2    0.7    172 16820
3    0.8    51  4326
4    0.9    49  3727
5    1.0    0     0

Я хочу построить их в обратном порядке от наименьшего dat$tp к наибольшему.Однако этот код отображает их в порядке, аналогичном приведенному выше (то есть, от наибольшего к наименьшему).

> fp_max <- max(dat$fp);
> tp_max <- max(dat$tp);
> op <- par(xaxs = "i", yaxs = "i")
> plot(tp ~ fp, data = dat, xlim = c(0,fp_max),ylim = c(0,tp_max), type = "n")
> with(dat, lines(c(0, fp, fp_max), c(0, tp, tp_max),  lty=1, type = "l",  col = "black"))
> lines( par()$usr[1:2], par()$usr[3:4], col="red" )

Как я могу изменить приведенный выше код для решения проблемы?

Конечно, x-координаты оси и оси y должны быть от наименьшего к наибольшему значению

Ниже показан результат моего текущего кода.Figure

Обратите внимание, что линия начинается с 0,0 и снова «возвращается» к 0.мы хотим избежать возврата к 0.

Ответы [ 2 ]

4 голосов
/ 12 марта 2012

Ааа, я понимаю.

Это потому, что lines рисует линии между точками в том порядке, в котором они даны.

Есть несколько способов обойти это:

  1. do type='l' в вашей команде plot, а затем with(dat,lines(...)) не требуется:

    # can also do the col='black',lty=1 in here.
    plot(tp ~ fp, data = dat, xlim = c(0,fp_max),ylim = c(0,tp_max), type = "l")
    

    Обратите внимание, что по определению ваших fp_max и tp_max, вы уже включите точку (fp_max,tp_max). И если у вас есть строка с (0,0) для tp и fp в dat, вы также получите (0,0) балл.

  2. Сортировать dat$tp и использовать это для сортировки dat$fp тоже:

    plot(tp ~ fp, ..., type='n')
    # sort dat$tp
    obj <- sort(dat$fp,index.return=T)
    # use obj$x as tp and obj$ix to sort dat$fp prior to plotting
    with(dat, 
         lines(c(0, obj$x, fp_max), c(0, tp[obj$ix], tp_max),  
               lty=1, type = "l",  col = "black"))
    
0 голосов
/ 12 марта 2012
#Get order of rows
idx <- order(dat$tp)

#Select data in sorted order
sorted <- dat[idx,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...