2

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

我正在研究这样的数据框:

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 的顺序相同,我只需替换列名。

我怎样才能使这项工作?如果不可能,还有什么可以替代的?

提前致谢。

4

1 回答 1

2

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

df[,cols]

这基本上使用顺序cols来重新排序我们的数据框。这可以如下所示:

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

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

于 2019-05-16T12:43:12.360 回答