Как заказать столбец в кадре данных?

Я создал фрейм данных, который состоит из 3 столбцов x,y,z. Я хотел бы упорядочить свой фрейм данных в порядке убывания столбца z. Приведенный ниже код работает, но его вывод не соответствует, так как он дает правильный порядок с двузначными числами. Скажем, z=8,9,7,6,3,12,13,14,11. Приведенный ниже код порядка z как z=9,8,7,6,3,14,13,12,11 . Я не мог понять, как преодолеть эту проблему.

 for (i in 1:nrow(temp)){
 if(identical(s,temp[i,2])==TRUE){
    x[k]<-temp[i,1]
    y[k]<-temp[i,2]
    z[k]<-as.numeric(temp[i,4])
    k<-k+1
     }}
    frame<-data.frame(cbind(x,y,z))
    print(frame[with(frame, order(z)), ])
    my output:
                 8.8
                 8.8
                 8.7
                 8.7
                 8.5
                 8.1   #here is the errorhow can 8.1 come before 15.8?
                 15.8 
                 15.7

2 ответа

Решение

Ты можешь использовать order, Если твой data.frameзовут sample, вы можете просто напечатать sample[order(-as.numeric(as.character(sample$z))), ], Ниже приведен пример:

sample <- data.frame(x = c(5,6,7), y = c(1,2,3), z = c(`2`,`3`,`1`))
sample
  x y z
1 5 1 2
2 6 2 3
3 7 3 1
sample[order(-as.numeric(as.character(sample$z))), ] ## updated
  x y z
2 6 2 3
1 5 1 2
3 7 3 1

Это в основном говорит "пожалуйста, распечатай sample, упорядочено по убыванию sample$z". minus sign обозначает убывающий порядок. Кроме того, не забывайте эту запятую! Эта запятая необходима, потому что в противном случае вы бы выбрали столбцы вместо строк. Я делал эту ошибку много раз, вы должны обратить на это внимание.

Если ваш фрейм данных называется temp, вы можете отсортировать его, уменьшив порядок столбца z следующим образом:

sorted <- temp[with(temp, order(-z)), ]
Другие вопросы по тегам