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 - 重新组织多索引的顺序