Как заказать столбец в кадре данных?
Я создал фрейм данных, который состоит из 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)), ]