按列排序R中的数据框

时间:2017-11-08 13:00:54

标签: 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"))
colnames(df) <- c("A")
df <- data.frame(df[,order(colnames(df))])
print(colnames(df))

在代码的第一部分中,数据框df保留其列,但在第二部分中,它会丢失列名。

显然,如果只有一列,可以检查列数并将其名称恢复,但这听起来不太好。

有没有人知道处理这个问题的更好方法?

3 个答案:

答案 0 :(得分:0)

您可以使用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))

答案 1 :(得分:0)

也可以使用select来排序列

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

答案 2 :(得分:0)

在第一条评论中,安德烈·埃里科的Coutesy,最直接的解决方案似乎是使用掉落:

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