data.table按索引重新排序列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了data.table按索引重新排序列相关的知识,希望对你有一定的参考价值。

我有:

> aDT <- data.table(col5 = 5, col1 = 1, col2 = 2, col4 = 4, col3 = 3)
> aDT
   col5 col1 col2 col4 col3
1:    5    1    2    4    3

以及:

index1 <- c(5,1,2)
index2 <- c(4,3)

我需要:

> aDT <- data.table(col1 = 1, col2 = 2, col3 = 3, col4 = 4, col5 = 5)
> aDT
   col1 col2 col3 col4 col5
1:    1    2    3    4    5

试过:

> setcolorder(aDT,c(index1,index2))
> aDT
   col3 col5 col1 col4 col2
1:    3    5    1    4    2

如你所见,它不起作用。有人可以帮忙吗?

答案

我们可以使用match

setcolorder(aDT, match(seq_along(aDT), c(index1, index2)))
aDT
#   col1 col2 col3 col4 col5
#1:    1    2    3    4    5
另一答案

应该使用:

setcolorder(aDT,order(c(index1,index2)))

谢谢你的提示。

另一答案

它按预期工作。查看当前列顺序:

> aDT <- data.table(col5 = 5, col1 = 1, col2 = 2, col4 = 4, col3 = 3)
> aDT
   col5 col1 col2 col4 col3
1:    5    1    2    4    3

现在,> setcolorder(aDT,c(index1,index2))建议改变秩序为5,1,2,4,3。意味着从5 to 1, from 1 to 2, 2 to 3 and so on移动当前列。

我认为你想要的东西可以用简单的方式实现:

> setcolorder(aDT,sort(names(aDT))
> aDT
   col1 col2 col3 col4 col5
1:    1    2    3    4    5
另一答案

它完全符合您的要求。您提供列索引而不是列名。首先是第5列,它被称为'col3',然后它取第一列'col5',依此类推。您可以通过以所需的正确顺序提供组合名来使用组合名称。

以上是关于data.table按索引重新排序列的主要内容,如果未能解决你的问题,请参考以下文章

引导表:按日期字段排序

使用不同方式对具有数字索引的data.table列进行子集化时的结果不同

Pandas Pivot Table - 重新组织多索引的顺序

data.table 连接然后将列添加到现有的 data.frame 而无需重新复制

data.table不会按预期修改列

MYSQL - 按索引列排序