dar*_*ber 1 sorting r dataframe data.table
我有一个data.frame(data.table实际上是一个)我需要按多列排序。要排序的列的名称在一个向量中。我该怎么做?例如
DF <- data.frame(A= 5:1, B= 11:15, C= c(3, 3, 2, 2, 1))
DF
A B C
5 11 3
4 12 3
3 13 2
2 14 2
1 15 1
sortby <- c('C', 'A')
DF[order(sortby),] ## How to do this?
Run Code Online (Sandbox Code Playgroud)
所需的输出如下,但使用sortby向量作为输入。
DF[with(DF, order(C, A)),]
A B C
1 15 1
2 14 2
3 13 2
4 12 3
5 11 3
Run Code Online (Sandbox Code Playgroud)
( 的解决方案data.table是可取的。)
编辑:如果基本 R 或 data.table 不需要太多编码,我宁愿避免导入其他包。
使用data.table:
setorderv(DF, sortby)
Run Code Online (Sandbox Code Playgroud)
这使:
Run Code Online (Sandbox Code Playgroud)> DF A B C 1: 1 15 1 2: 2 14 2 3: 3 13 2 4: 4 12 3 5: 5 11 3
为了完整起见,使用setorder:
setorder(DF, C, A)
Run Code Online (Sandbox Code Playgroud)
使用setorder/的优点setorderv是数据通过引用重新排序,因此非常快速且内存高效。这两个函数都适用于data.table's 和 on data.frame's。
如果要组合升序和降序,可以使用 -order参数setorderv:
setorderv(DF, sortby, order = c(1L, -1L))
Run Code Online (Sandbox Code Playgroud)
随后给出:
Run Code Online (Sandbox Code Playgroud)> DF A B C 1: 1 15 1 2: 3 13 2 3: 2 14 2 4: 5 11 3 5: 4 12 3
setorder您可以通过以下方式实现相同的目标:
setorder(DF, C, -A)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |