Joh*_*ark 76 sorting r dataset
这可能是一个简单的问题,但我不知道如何按字母顺序排列.
test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))
# C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2
Run Code Online (Sandbox Code Playgroud)
我喜欢按字母顺序按列名排序,以实现
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Run Code Online (Sandbox Code Playgroud)
对于其他人,我想要自己定义的订单:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Run Code Online (Sandbox Code Playgroud)
请注意我的数据集很大,有10000个变量.因此,该过程需要更加自动化.
Jam*_*mes 117
您可以使用order上names,并用它来定购子集化时的列:
test[ , order(names(test))]
A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8
Run Code Online (Sandbox Code Playgroud)
对于您自己定义的顺序,您需要定义自己的名称映射到排序.这取决于你想如何做到这一点,但交换上面的任何功能order应该给你想要的输出.
例如,您可以查看根据指定所需顺序的目标向量对数据框的行进行排序,即您match的数据框可以names针对包含所需列顺序的目标向量.
And*_*ēza 17
这是必须的dplyr答案,如果有人想用管道这样做.
test %>%
select(sort(names(.)))
Run Code Online (Sandbox Code Playgroud)
小智 13
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
Run Code Online (Sandbox Code Playgroud)
使用简单的以下函数替换可以执行(但仅当数据框没有很多列时):
test <- test[, c("A", "B", "C")]
Run Code Online (Sandbox Code Playgroud)
为他人:
test <- test[, c("B", "A", "C")]
Run Code Online (Sandbox Code Playgroud)
小智 6
如果你只想要一列或多列在前面而不关心其余的顺序:
require(dplyr)
test %>%
select(B, everything())
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用str_sort()from library stringr和参数numeric = TRUE。这将正确排序包含数字的列,而不仅仅是按字母顺序排列:
str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11