根据不同排序的字符向量替换数据框中的列名

Replace column names in dataframe based on a character vector that is ordered differently

我的问题是如何根据字符向量重命名我的列名,同时将向量的顺序强加到我的数据框上。我已经阅读了所有类似的帖子,但没有回答我的问题。

我正在处理这样的数据框:

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) 替换为后者在 cols 中的位置,但显然我无法对这些数字进行排序,因为它们不被 R 视为整数(由于 R 不允许数字是变量的名称)。如果我可以这样做,那么 df 将与 cols 的顺序相同,我将只替换列名。

我怎样才能完成这项工作?如果不可能,还有什么替代方案?

提前致谢。

我们可以使用 cols 对数据框中的列重新排序:

df[,cols]

这基本上使用 cols 的顺序来重新排序我们的数据框。可以这样看:

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

如果我们有一个名为 cols 的向量并将其设置为 c("A","B")c("B","A"),那么我们可以使用此 "trick" 来帮助我们对列重新排序。