Как изменить порядок столбцов data.table (без копирования)

Я хотел бы изменить порядок столбцов в моей 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] # cba # 1: 0.8476623 3 1 # 2: 0.4787768 2 2 # 3: 0.3570803 1 3 

но это потребует повторного копирования всего набора данных. Есть ли другой способ сделать это?

2 Solutions collect form web for “Как изменить порядок столбцов data.table (без копирования)”

Использовать setcolorder() :

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

От ?setcolorder :

В языке data.table все set* функции меняют свой вход по ссылке. То есть никакой копии не делается вообще, кроме временной рабочей памяти, которая равна одному столбцу.

поэтому должно быть довольно эффективно. Подробнее см. ?setcolorder .

Может быть проще использовать вышеупомянутое решение, но вместо этого сортировать по номеру столбца. Например: library (data.table)

  > x < - data.table(a = 1:3, b = 3:1, c = runif(3)) > x abc [1,] 1 3 0.2880365 [2,] 2 2 0.7785115 [3,] 3 1 0.3297416 > setcolorder(x, c(3,2,1)) > x cba [1,] 0.2880365 3 1 [2,] 0.7785115 2 2 [3,] 0.3297416 1 3 
  • Создайте пустой файл data.frame
  • Пример случайных строк в каждой группе в таблице данных.
  • Время выполнения функции измерения в R
  • Как удалить все пробелы из строки?
  • Кривая кривой полинома в R
  • Как я могу сделать графики согласованной ширины в ggplot (с легендами)?
  • Транспонирование / изменение формы данных без «timevar» от длинного до широкоформатного
  • двухсторонний график плотности в сочетании с односторонним графиком плотности с выбранными областями в r
  • Количество строк в каждой группе
  • Общие рекомендации по отладке в R
  • Создание кадра данных с неравными длинами
  • Interesting Posts

    Как загрузить пакет Nuget без расширения nuget.exe или Visual Studio?

    Два компьютера с объединенными ресурсами процессора и памяти?

    Как правильно использовать cv :: triangulatePoints ()

    Получение classа по его названию

    Настройка трех мониторов на машине со встроенной графической картой

    Преобразование сплющенных иерархических данных из SQL Server в структурированный объект JSON с C # / Linq

    Использование onSaveInstanceState с fragmentами в backstack?

    Почему мы должны нормализовать вход для искусственной нейронной сети?

    URL-адреса с косой чертой в параметре?

    как создать анимированный gif в .net

    Элемент модели, переданный в словарь, имеет тип «mvc.Models.ModelA», но для этого словаря требуется элемент модели типа «mvc.Models.ModelB»

    Альтернативы Visio

    Как создать UITableViewCell с прозрачным фоном

    Как вертикально центрировать изображение внутри div

    Объектив C Эквивалент «переменных переменных» PHP

    Давайте будем гением компьютера.