我有这样的数据框:
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语句,但这需要很长时间才能完成。这就是为什么我需要一个更快的替代方案
谢谢
答案 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)))