我有:
> 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
正如您所看到的,它无法正常工作。有人可以帮忙吗?
答案 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',依此类推。 您可以通过以正确的顺序提供组合名来使用组合名称。