Замените имена столбцов в кадре данных на основе символьного вектора, который упорядочен по-другому - PullRequest
1 голос
/ 16 мая 2019

Мой вопрос заключается в том, как переименовать имена моих столбцов, основываясь на символьном векторе, при наложении порядка вектора на мой фрейм данных.Я прочитал все подобные посты, но не отвечаю на мой вопрос.

Я работаю над фреймом данных следующим образом:

df<- data.frame(q3= c(1,4,6,1), q12=c(5,3,2,4), q11=c(1,2,3,4), q1=c(5,6,4,5),q5= c(1,4,6,1), q9=c(5,3,2,4), q10=c(1,2,3,4), q4=c(5,6,4,5),q2= c(1,4,6,1), q7=c(5,3,2,4), q6=c(1,2,3,4), q8=c(5,6,4,5))

В идеале я хотел бы заказать эти столбцы на основеих индекс т.е. q1, q3, q78, q99.Однако это кажется трудным.

К счастью, у меня также есть вектор, который содержит упорядоченные имена столбцов:

cols<- c("q1", "q2", "q3", "q4","q5", "q6", "q7", "q8","q9", "q10", "q11", "q12")

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

colnames(df) <- match(colnames(df), cols)

df <- df[,order(names(df))]

, которая заменяет colnames(df) на позицию, в которой последние находятся в столбцахно ясно, что я не могу упорядочить эти числа, так как они не воспринимаются R как целые числа (из-за того, что R не позволяет числам быть именами переменных).Если бы я мог сделать это, то df был бы в том же порядке, что и столбцы cols, и я бы просто заменил имена столбцов.

Как я могу заставить эту работу работать?Если это невозможно, что может быть альтернативой?

Заранее спасибо.

1 Ответ

1 голос
/ 16 мая 2019

Мы можем использовать cols, чтобы изменить порядок столбцов в нашем фрейме данных:

df[,cols]

Это в основном использует порядок cols для переупорядочения нашего фрейма данных. Это можно увидеть следующим образом:

df[,c("B","A")]
df[,c("A","B")] 

Если бы у нас был вектор с именем cols и установить его как c("A","B") или c("B","A"), мы могли бы затем использовать этот «трюк», чтобы помочь нам изменить порядок столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...