在按列名排序数据框时,我观察到一些奇怪的行为。基本上,当数据框只有一列时,在排序时,它会丢失列名,但是当它有多列时不会发生这种情况。这是一个示例代码:
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
保留其列,但在第二部分中,它会丢失列名。
显然,如果只有一列,可以检查列数并将其名称恢复,但这听起来不太好。
有没有人知道处理这个问题的更好方法?
答案 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)
data.frame(df[,order(colnames(df)),drop=F])