根据字符向量重新排序数据帧

时间:2016-06-30 13:49:09

标签: r vector dataframe

我认为这应该很简单,但我找不到办法做到这一点。

我想根据因素重新排序数据框。到目前为止我能找到的所有答案都提供了逻辑排序,但这是任意的,是数字和字母的混合。也许这是一个问题,因为它是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")

的顺序排列

2 个答案:

答案 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