按列排序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,你就不需要另一个包。我没有意识到这一点,因此今天也学到了一些东西。