Ответ 1
Вы были рядом с первой попыткой, просто забыли об использовании drop = FALSE
:
> d[order(-d$data), , drop = FALSE]
data
yak 4
baz 3
bar 2
foo 1
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])
... который все еще оставляет меня с неправильным именем столбца.
Есть ли разумный способ сделать это?
Вы были рядом с первой попыткой, просто забыли об использовании drop = FALSE
:
> d[order(-d$data), , drop = FALSE]
data
yak 4
baz 3
bar 2
foo 1