我想对我的data.table x中的列重新排序,给定一个列名称的字符向量,neworder:

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
neworder <- c("c", "b", "a")

显然我能做到:

x[ , neworder, with = FALSE]
# or
x[ , ..neworder]
#            c b a
# 1: 0.8476623 3 1
# 2: 0.4787768 2 2
# 3: 0.3570803 1 3

但这需要再次复制整个数据集.还有别的方法吗?

推荐答案

使用setcolorder():

library(data.table)
x <- data.table(a = 1:3, b = 3:1, c = runif(3))
x
#      a b         c
# [1,] 1 3 0.2880365
# [2,] 2 2 0.7785115
# [3,] 3 1 0.3297416
setcolorder(x, c("c", "b", "a"))
x
#              c b a
# [1,] 0.2880365 3 1
# [2,] 0.7785115 2 2
# [3,] 0.3297416 1 3

?setcolorder开始:

data.table种说法,所有set*个函数都通过引用来更改输入.也就是说,除了一列大小的临时工作内存之外,根本不复制任何内容.

所以应该非常有效.详情见?setcolorder.

R相关问答推荐

如何通过Exams2黑板对非整数字的问题进行评分

了解.groups的目的= dØr的摘要功能中的删除

self_函数无法工作--无法子集结束后的列

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

名称输出pmap on tible

使用tidyverse方法绑定行并从一组管道列表执行左连接

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

在R中为马赛克图中的每个字段着色

使用sf或terra的LINESTRAING的累积长度

在R中无法读入具有Readxl和lApply的数据集

如何编辑gMarginal背景以匹配绘图背景?

使用外部文件分配变量名及其值

R中插入符号训练函数的中心因子和尺度因子预测

您是否可以折叠R中的重复行,同时保留基于所选列的值?

使用RSelenium在R中抓取Reddit时捕获多个标签

防止正则表达式覆盖以前的语句

如何在条形图中的x和填充变量中包含多个响应变量?

整理曲线图、曲线图和点图

变异以按组从其他列创建具有最大和最小值的新列