按列排序R中的数据帧

按列排序R中的数据帧,r,dataframe,R,Dataframe,在按列名排序数据帧时,我观察到一些奇怪的行为。基本上,当数据帧只有一列时,在排序时,它会松开列名,但当它有多个列时不会发生这种情况。这是一个示例代码: df <- data.frame(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9")) colnames(df) <- c("A", "C", "B") df <- data.frame(df[,order(colnames(df))]) print(colnames(df)

在按列名排序数据帧时,我观察到一些奇怪的行为。基本上,当数据帧只有一列时,在排序时,它会松开列名,但当它有多个列时不会发生这种情况。这是一个示例代码:

df <- data.frame(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9"))
colnames(df) <- c("A", "C", "B")
df <- data.frame(df[,order(colnames(df))])
print(colnames(df))


df <- data.frame(c("1", "2", "3"))
colnames(df) <- c("A")
df <- data.frame(df[,order(colnames(df))])
print(colnames(df))

df您可以使用
tibble
而不是
data.frame

library(tibble)
df <- tibble(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9"))
colnames(df) <- c("A", "C", "B")
df <- df[,order(colnames(df))]
print(colnames(df))


df <- tibble(c("1", "2", "3"))
colnames(df) <- c("A")
df <- df[,order(colnames(df))]
print(colnames(df))
库(TIBLE)

df您可以使用
tibble
代替
data.frame

library(tibble)
df <- tibble(c("1", "2", "3"), c("4", "5", "6"), c("7", "8", "9"))
colnames(df) <- c("A", "C", "B")
df <- df[,order(colnames(df))]
print(colnames(df))


df <- tibble(c("1", "2", "3"))
colnames(df) <- c("A")
df <- df[,order(colnames(df))]
print(colnames(df))
库(TIBLE)

df还可以使用select对列进行排序

df %>% select_(.dots = sort( colnames(df) ))

还可以使用select对列进行排序

df %>% select_(.dots = sort( colnames(df) ))

Andre Elrico的Coutesy在第一条评论中,最直接的解决方案似乎是使用drop:

data.frame(df[,order(colnames(df)),drop=F])

Andre Elrico的Coutesy在第一条评论中,最直接的解决方案似乎是使用drop:

data.frame(df[,order(colnames(df)),drop=F])

好的旧
掉落问题。用法:
data.frame(df[,order(colnames(df)),drop=F])
在这种情况下,更好的方法是使用列表语法:
df[order(colnames(df))]
将保留列表结构(和相关名称),而
df[order(colnames(df)),]
将在单列data.frame.good old的实例中删除列表结构
drop
问题。用法:
data.frame(df[,order(colnames(df)),drop=F])
在这种情况下,更好的方法是使用列表语法:
df[order(colnames(df))]
将保留列表结构(和相关名称),而
df[order(colnames(df)),]
将删除单列data.frame实例中的列表结构。为什么要为这么简单的任务安装软件包并更改数据结构?确实如此。但是如果你总是像我一样使用tibbles,你就不会有这个问题。但可能是其他人;-)在这种情况下,您不再需要
data.frame()
df@ANG绝对正确,我有点马虎。据此编辑。但无论如何,@andreelrico的解决方案更好,因为如果你根本不使用tibbles,你就不需要另一个包。我没有意识到这一点,因此今天也学到了一些东西。为什么要为这么简单的任务安装软件包并更改数据结构?没错。但是如果你总是像我一样使用tibbles,你就不会有这个问题。但可能是其他人;-)在这种情况下,您不再需要
data.frame()
df@ANG绝对正确,我有点马虎。据此编辑。但无论如何,@andreelrico的解决方案更好,因为如果你根本不使用tibbles,你就不需要另一个包。我没有意识到这一点,因此今天也学到了一些东西。