根据不同排序的字符向量替换数据框中的列名
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" 来帮助我们对列重新排序。
我的问题是如何根据字符向量重命名我的列名,同时将向量的顺序强加到我的数据框上。我已经阅读了所有类似的帖子,但没有回答我的问题。
我正在处理这样的数据框:
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" 来帮助我们对列重新排序。