创建一个新列,根据以前的列排列数据框顺序

时间:2012-05-26 11:30:39

标签: r

我有这样的数据框:

  A     B      C    
1   1   1 0.4519
2 101   1 0.3819
3 201   1 0.3819
4 301   1 0.2819
5 401   1 0.9819
6 501   1 0.6819

它更大但是这是一个例子。

我想创建一个名为order的新列,其中包含来自(1 until nrow(df))的数字,它会根据C列的值增加(1表示最小值并随着增加而增加C值)。当列C中的值相等时,将排序条件更改为列A,当列A中的值相等时,将其更改为列B

这可以通过简单有效的方式在R中完成吗?

这可以使用数据框上的for循环来完成并制作一些if语句,但这需要很长时间才能完成。这就是为什么我需要一个更快的替代方案

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用order根据多个列对数据进行排序。根据{{​​1}}文档:

  

在第一个向量中为tie的情况下,第二个向量中的值为     过去打破关系。如果值仍然绑定,则值为     后来的论点被用来打破平局。

这将是您的样本数据框:

order

这是根据您想要的顺序在数据框中创建新列的代码:

df <- data.frame(list(A=c(1, 101, 201, 301, 401, 501),
                      B=rep(1, 6),
                      C=c(0.45, 0.38, 0.38, 0.28, 0.98, 0.68)))