我们假设我们有这样的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数据框中订购那些项?是否有可能告诉订单函数只对数据框的某些行索引进行排序?
答案 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)), ]
会做你想做的事情 - 这只是按dataframe
和col1
对col2
进行排序。如果您不想按col1
订购,则在另一个答案中提供了一种方法。