这可能是一个简单的问题,但我不知道如何按字母顺序排列。
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
我喜欢按字母顺序按列名排序,以实现
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
对于其他人,我想要自己定义的订单:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
请注意我的数据集很大,有10000个变量。因此,流程需要更加自动化。
答案 0 :(得分:107)
您可以在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
对于您自己定义的订单,您需要定义自己的名称映射到排序。这取决于您希望如何执行此操作,但是使用上面的order
交换任何函数都应该提供您想要的输出。
例如,您可以查看Order a data frame's rows according to a target vector that specifies the desired order,即您可以针对包含所需列顺序的目标向量match
数据框names
。
答案 1 :(得分: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))
可以使用简单的以下函数替换(但仅当数据框没有很多列时):
test <- test[, c("A", "B", "C")]
其他人:
test <- test[, c("B", "A", "C")]
答案 2 :(得分:9)
这是强制性的dplyr
答案,以防有人要使用管道执行此操作。
test %>%
select(sort(names(.)))
答案 3 :(得分:3)
test[,sort(names(test))]
对列名称进行排序可以轻松实现。
答案 4 :(得分:0)
以下是我发现用我的数据集实现类似问题的方法。
首先,做詹姆斯上面提到的,即
test[ , order(names(test))]
其次,使用dplyr中的everything()函数在数据框的开头移动感兴趣的特定列(例如,“D”,“G”,“K”),将字母顺序的列放在那些列之后。
select(test, D, G, K, everything())
答案 5 :(得分:0)
如果您只想在前面放置一列或多列,而不关心其余顺序:
fun updatePetItemsWithNewGender(gender: String?) {
this@PetViewModel.genderMutableData.postValue("female")
}
答案 6 :(得分:0)
类似于以上其他语法,但需要学习-您可以按列名排序吗?
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d(logTag, "Get new intent...");
String action = intent.getAction();
String type = intent.getType();
if(Intent.ACTION_SEND.equals(action) && type != null) {
if("text/plain".equals(type)) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
Log.d(logTag, "Get text/plain intent: " + sharedText);
publishMessage("Oh, a new intent!");
}
}
}
答案 7 :(得分:0)
另一种选择是使用库 stringr 中的str_sort()
,并使用参数numeric = TRUE
str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
答案 8 :(得分:0)
因此,首先要有特定的列,然后再按字母顺序排列其余的列,我将提出以下解决方案:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]