我认为这应该很简单,但我找不到办法做到这一点。
我想根据因素重新排序数据框。到目前为止我能找到的所有答案都提供了逻辑排序,但这是任意的,是数字和字母的混合。也许这是一个问题,因为它是factor
而不是vector
?但是,矢量的答案似乎都不起作用。
任何建议都会非常感激!
示例数据 (注意;这个数据仅用于这个问题,在我的实际代码中,数据帧是其他一些计算的输出,因此我不能在开始时将名称改为合理的名称)
DATA<- data.frame(This=c("120", "60", "90", "OG"), That=c(453, 679,12,252))
DATA
This That
1 120 453
2 60 679
3 90 12
4 OG 252
我想按照60 - 90 - 120 - OG的顺序对它进行排序,即
This That
1 60 679
2 90 12
3 120 453
4 OG 252
修改:这不是一个重复的问题。如上所述,以及在下面的评论中,排序是任意的。词典排序假定行名称是相互关联的,这不是这里的情况。我可以标记行("unicorn", "18.1", "TREES", "234234235")
,并按照("234234235", "unicorn", "TREES", "18.1")
答案 0 :(得分:2)
您可以使用factor
变量调整顺序,如下所示:
DATA$This <- factor(DATA$This, levels=c("60", "90", "120", "OG"))
请注意,这不会更改标签值:
DATA
This That
1 120 453
2 60 679
3 90 12
4 OG 252
但是它会更改映射到这些标签的基础整数,以便您可以根据需要对数据进行排序:
DATA[order(DATA$This),]
This That
2 60 679
3 90 12
1 120 453
4 OG 252
答案 1 :(得分:0)
这是一个用于排序混合类型列的选项,我们首先将列转换为数字并进行排序,以确保数值始终位于字符值的前面,并按自然顺序排序,然后按字符类型排序确保字符值按字母顺序排列,假设This
列已经是character
类:
library(dplyr)
DATA %>% arrange(as.numeric(This), as.character(This))
# This That
# 1 60 679
# 2 90 12
# 3 120 453
# 4 OG 252