仅将数据帧从某个行索引排序到某个行索引

时间:2014-06-01 18:37:03

标签: r sorting dataframe

我们假设我们有这样的DF:

col1 col2 
A   1
A   5
A   3
A   16
B   5
B   4
B   3
C   7
C   2

我试图订购col2,但只针对col1中的相同值。更好的说,我希望它看起来像这样:

 col1 col2 
    A   1
    A   3
    A   5
    A   16
    B   3
    B   4
    B   5
    C   2
    C   7

因此,仅为A,B和C值命令col2,而不是命令整个col2列

x <- function() {
    values<- unique(DF[, 1])

      for (i in values) {
        currentData <- which(DF$col1== i)

## what to do here ?

        data[order(data[, 2]), ]
      }

}

所以在CurrentData我只有As,Bs等的col2值的索引。但是我如何只在整个DF数据框中订购那些项?是否有可能告诉订单函数只对数据框的某些行索引进行排序?

2 个答案:

答案 0 :(得分:5)

ave将按第一个元素对数据进行分组,并将命名函数应用于每个组的第二个元素。以下是组内ave排序的应用程序:

DF$col2 <- ave(DF$col2, DF$col1, FUN=sort)
DF
##   col1 col2
## 1    A    1
## 2    A    3
## 3    A    5
## 4    A   16
## 5    B    3
## 6    B    4
## 7    B    5
## 8    C    2
## 9    C    7

即使col1中的值不连续,也会将它们保留在原始位置,这将有效。

如果这不是一个重要的考虑因素,那么有更好的方法可以做到这一点,例如@ user314046的答案。

答案 1 :(得分:4)

似乎

my_df[with(my_df, order(col1, col2)), ]

会做你想做的事情 - 这只是按dataframecol1col2进行排序。如果您不想按col1订购,则在另一个答案中提供了一种方法。