Подтвердить что ты не робот

Как я могу сортировать data.frame только с одним столбцом, не теряя названия ростов?

data = c(1,2,3,4)
names = c("foo", "bar", "baz", "yak")
d = data.frame(data, row.names=names)

Это возвращает:

    data
foo    1
bar    2
baz    3
yak    4

Теперь я хотел бы отсортировать этот фрейм данных по столбцу, не теряя при этом имена строк. Итак, мой результат:

    data
yak    4
baz    3
bar    2
foo    1

Я уже пробовал следующее:

  • d[order(-d$data),], который, конечно, дает мне только одномерный список.

  • arrange(d, desc(data)) из пакета plyr, который отбрасывает имена строк.

  • Узнайте порядок с o = order(-d$data), затем восстановите кадр с помощью

    data.frame(d[o,], row.names=rownames(d)[o])
    

    ... который все еще оставляет меня с неправильным именем столбца.

Есть ли разумный способ сделать это?

4b9b3361

Ответ 1

Вы были рядом с первой попыткой, просто забыли об использовании drop = FALSE:

> d[order(-d$data), , drop = FALSE]
    data
yak    4
baz    3
bar    2
foo    1