2013-12-05 5 views
0

Я ищу, чтобы заказать мои столбцы по имени. Я знаю, что могу сделать следующее: portManDMA = portManDMA[,c(1,2,6,7,8,9,10,3,4,5,11,12,13,14,15,16,17,18,19)], чтобы изменить порядок столбцов, но то, что я хотел бы сделать, на самом деле использует имя столбца в заказе. Например:Стол заказов по их именам

## OriginalMatrix 
DEF ABC KLM HIJ 

Где каждая из трех букв представляет собой имя столбца. Я хотел бы затем изменить их порядок на основе имен столбцов, что-то вроде portManDMA = portManDMA[,c("ABC","KLM","DEF","HIJ")], например, так, что новый порядок будет таким:

## NewMatrix 
ABC KLM DEF HIJ 

ли кто-нибудь сможет помочь мне с этим?

Спасибо!

Майк

+0

@AnandaMahto, нет, я пытаюсь заказать столбцы по именам столбцов, где имена столбцов - «ABC», «KLM», «DEF» и «HIJ». Когда я пытаюсь использовать приведенный выше код, он не сортирует данные по своему усмотрению. Спасибо – Mike

+1

Эх !? 'portManDMA = portManDMA [, c (« ABC »,« KLM »,« DEF »,« HIJ »)]' * is * ответ, просто посмотрите обновленный ответ @ gung. Если это не дает вам то, что вы хотите, вы не говорите нам что-то важное. Как другие спросили, пожалуйста, дайте воспроизводимый пример и покажите, что не работает для вас (например, * фактический * код) –

ответ

3

Одним из возможных вариантов:

portManDMA[,sort(colnames(portManDMA))] 

НТН

3

Вы можете легко получить доступ к колонке (переменная) имена в кадре данных (или матрицы) с ?colnames. Если у вас есть это, вы можете получить новый заказ, как тот, который вы указываете в начале вашего вопроса, с ?order (есть еще о том, как понимать order() в этом потоке SO: Understanding the order() function). Вот способ сделать это с помощью, например:

> portManDMA <- read.table(text="DEF ABC KLM HIJ 
+ 1 2 1 3 
+ 3 5 9 4", header=TRUE) 
> portManDMA 
    DEF ABC KLM HIJ 
1 1 2 1 3 
2 3 5 9 4 
> new.order <- order(colnames(portManDMA)) 
> new.order 
[1] 2 1 4 3 
> portManDMA <- portManDMA[, new.order] 
> portManDMA 
    ABC DEF HIJ KLM 
1 2 1 3 1 
2 5 3 4 9 

К сожалению о алфавитном предположении, что ваш код работал нормально для меня:

> portManDMA <- portManDMA[,c("ABC","KLM","DEF","HIJ")] 
> portManDMA 
    ABC KLM DEF HIJ 
1 2 1 1 3 
2 5 9 3 4 
+0

Спасибо за ответ. Это не сработает для меня, поскольку заказ не обязательно в алфавитном порядке. Еще раз спасибо – Mike

+0

Извините, я, должно быть, слишком быстро прочитал ваш вопрос. Если вы не запрашиваете удобный способ получить их в алфавитном порядке, что вы просите? У вас есть способ переупорядочения, указанный в вашем вопросе, вам просто нужно сделать это вручную, если оно не в алфавитном порядке. – gung

Смежные вопросы