data.table按索引重新排序列

时间:2017-12-19 05:30:37

标签: r 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

正如您所看到的,它无法正常工作。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

我们可以使用match

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

答案 1 :(得分:3)

应该使用:

AccountInfo: 94

感谢您的提示。

答案 2 :(得分:2)

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

> 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

答案 3 :(得分:0)

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