Data.table: Виньетки

Созданный на 11 нояб. 2014  ·  54Комментарии  ·  Источник: Rdatatable/data.table

Серия HTML-виньеток:

Запланировано на v1.9.8

  • [] Краткий обзор data.table
  • [x] [Подмножество ключей и быстрого двоичного поиска] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-keys-fast-subset.html)
  • [x] [Вторичные индексы и автоматическое индексирование] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-secondary-indices-and-auto-indexing.html)
  • [] Присоединяется к виньетке . a) _joins_ vs _subsets_ - расширение подмножества на основе двоичного поиска до объединений + условных / неэквивалентных объединений, циклических и интервальных объединений. б) by = .EACHI, присоединиться + функция обновления. c) Документируйте использование i.col как указано в # 1038. г) Также расскажите о производительности / преимуществах # 1232.
  • [] Обложка get() и mget() .
  • [] Добавьте about = аргумент в FAQ (# 1623).
  • [] В FAQ 5.3 необходимо упомянуть, что это _ пустая_ копия, сделанная для того, чтобы восстановить избыточное выделение памяти. Спасибо Яну за ссылку в # 1729.

Будущие релизы

  • [] внутреннее устройство data.table, аспекты производительности и _выразительность_
  • [] Чтение нескольких файлов ( fread + rbindlist ), операции упорядочивания, ранжирования и установки
  • [] Виньетка IDateTime
  • [] Задокументируйте разницу между data.table() и data.frame() где-нибудь - соответствующие вопросы: # 968, # 877. Возможно чуть подробнее в FAQ.
  • [] FAQ по coursera
  • [] Расширенное использование data.table :

    • [] NSE

    • [] ...

  • [] Виньетка времени (перемещаем сюда # 520, чтобы собрать все в одном месте, но не уверен, нужна ли она нам в качестве виньетки, поскольку у нас есть Wiki с тестами / таймингами).
  • [] fread+fwrite виньетка, включает также удобные функции fread wiki, а также https://github.com/Rdatatable/data.table/issues/2855

Законченный:

  • [x] [Введение в data.table] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-intro-vignette.html) - синтаксис data.table, общая форма, подмножество строк в i , select / do в j и агрегации с использованием by .
  • [x] [Ссылочная семантика] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html) (_add / update / delete_ столбцы по ссылке и увидим, что мы можем объединить с i и by же, как и раньше)
  • [x] [Эффективное изменение формы с использованием data.tables] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reshape.html)
  • [x] Ссылка на этот ответ в SO на by=.EACHI пока виньетка не будет готова.

Незначительный:

  • [] Операции с использованием integer64 и продвижение его для _больших целых_.

Примечания (для обновления текущих виньеток на основе отзывов): Пожалуйста, дайте мне знать, если я что-то пропустил.

Введение в data.table:

  • [x] order в i .
  • [x] Объясните, как назвать столбцы в j при выборе / вычислении.
  • [x] Подчеркните, что _keyby_ применяется _после_ получения результата в вычисленном результате, а не в исходной таблице data.table.
  • [x] Упомяните о новых обновлениях в .SDcols и столбцах в with=FALSE , о возможности выбора столбцов как colA:colB .

    Справочная семантика:

  • [] Также объясните здесь все другие соответствующие set* функции .. ( setnames , setcolorder т. Д.)

  • [] В основном set .
  • [x] Объясните, что 1b) the := operator просто определяет способы его использования - приведенный там пример не работает, поскольку он просто показывает два разных способа его использования - После этого комментария .

    Ключи и подмножества на основе быстрого двоичного поиска:

  • [] Добавить пример подмножества с использованием целочисленных / двойных клавиш.

  • [] Разница в "номинальном" по умолчанию в подмножествах, основанных на двоичном поиске.
  • [] возможна ли замена NA на подмножества на основе двоичного поиска?

    FAQ (думаю, здесь уместнее всего).

  • [x] Обновить FAQ с проблемой, когда внешний указатель имеет значение NULL при чтении объекта R из файла, например, с использованием readRDS() . Обновите эту публикацию SO .

  • [] Объясните на примере избыточное выделение data.table с помощью alloc.col() , а также когда его использовать (когда вам нужно создать несколько столбцов) и почему. Обновите эту публикацию SO .
documentation internals

Все 54 Комментарий

fread наименее заслуживает упоминания.
Вышеупомянутые пункты относятся в основном к преобразованию данных, fread - это скорее извлечение данных, поэтому его можно пропустить в такой виньетке, но, IMO, стоит упомянуть такие возможности data.table .

edit: какой из них вы собираетесь использовать: Rnw или Rmd?

Согласованы и обновлены.

Мне любопытно, что вызывает простуду быстрее, чем скажем tapply . Одна часть ответа - gforce, но как насчет пользовательских функций? Я ничего не мог найти по этому поводу. Есть хороший пост о панде: http://wesmckinney.com/blog/?p=489
Можно даже сравнить с sapply . Например, предположим, что я начинаю со списка векторов. Стоит ли когда-нибудь добавлять все векторы в один столбец таблицы data.table и использовать by вместо sapply ?

@matthieugomez интересный вопрос! Было бы неплохо осветить и это. Продолжайте :-).

Мне было бы интересно узнать об IDateTime и некоторых вариантах его использования.

@gsee обновлен.

Будучи новичком в R и data.table (с марта), я бы сказал, что должно быть базовое введение, ориентированное на результат, а не текущее ориентированное на функции. Другими словами, одно дело читать, что делает каждый параметр в data.table, но они часто не имеют смысла без учета сценария использования. Хотя есть примеры результатов, многим нужно пойти в другом направлении. То есть они знают, какой вывод им нужен, но не знают, какую функцию / параметр / настройку лучше всего использовать. Было бы полезно использовать простой рецептный подход, чтобы начать их работу.

Как мне создать подмножества моих данных?
Как мне выполнить операцию с подмножествами моих данных, чтобы создать новый или обновленный набор данных?
Как добавить новый столбец?
Как удалить столбец?
Как мне создать единственную переменную?
Как мне создать несколько переменных?
Как мне выполнять разные операции с разными подмножествами моих данных? (.К)
Как использовать data.table в функции и передавать имена и столбцы data.table для работы?
Как выполнить несколько последовательных операций с одной таблицей data.table?
Могу ли я выбрать подмножество данных и одновременно с ним выполнить операцию?
Когда нужно быть осторожным при создании / обновлении переменных по ссылке?
Как выбрать одно наблюдение для каждой группы (первое, последнее)?
Как установить ключ и чем он отличается от установки индекса?
При каких условиях мой ключ удаляется, когда я выполняю операцию с моей таблицей data.table?
Могу ли я просто использовать обычный синтаксис «слияния» или мне нужно использовать синтаксис data.table (Y [X])?
Как свернуть список списков в одну большую таблицу data.table? Что делать, если столбцы расположены в другом порядке?

На SO, вероятно, есть масса других элементов, которые можно было бы отредактировать в простой сборник вопросов и ответов.

@markdanese Спасибо за ваши предложения. Все это замечательно, но, вероятно, как отдельная вики, поскольку они очень специфичны для определенных задач. Цель виньетки - познакомить с синтаксисом data.table, показывающим, насколько он может быть гибким и мощным, чтобы вы могли выполнять эти задачи самостоятельно.

Сейчас я пишу виньетки (так быстро, как могу), и формат более или менее похож на этот (вопросы и ответы) и объясняю ответ на примере. Как только я отредактирую первую виньетку, я собираюсь опубликовать ее здесь, чтобы получить отзывы .. Было бы здорово узнать, что вы думаете.

Спасибо еще раз.

Дальнейшее расширение идеи вики-страницы: ссылки FAQ и Code Fragments (Advanced), перечисленные на http://www.ats.ucla.edu/stat/r/, могут быть полезным ресурсом для сопоставления традиционных задач в R с данными. .табельный способ. Я сделал что-то подобное в сообщении в блоге (http://vijaylulla.com/wp/2014/11/12/grouping-in-r-using-data-table/), чтобы показать это моему коллеге. Извините за бессовестную саморекламу.

Я закончил виньетку _Введение в data.table_ (см. Ссылку вверху). Было бы здорово узнать, что вы думаете.

Спасибо @jangorecki и @brodieG за отличные отзывы и, конечно же, @mattdowle :-).

Это действительно здорово. Хотелось бы, чтобы он существовал год назад, когда я начал использовать data.table. Вот пара мелочей на ваше рассмотрение:
Возможно, вы захотите упомянуть, что вы можете сортировать (через order ) в i в своем резюме в конце. Вы также можете упомянуть об этом в начале. Вы также можете упомянуть, что есть более сложные соединения, которые могут быть выполнены в i с использованием ключей, которые не охвачены. Это позволяет вам упомянуть основные функции i чтобы читатель мог искать более сложные функции, если они им нужны. И вы можете гиперссылку на них позже.

В разделе .SD вы пишете «эта группа», но было бы более ясно сказать «эта группа определена с помощью by ». Это тоже делается чуть позже.

Возможно, я пропустил это, но было бы неплохо прояснить, что .SD с by существу ограничивает данные столбцами .SD, а затем создает набор data.tables для каждая уникальная комбинация переменных в by . Затем он обрабатывает эти таблицы data.tables в порядке переменных by используя функцию (ы) из j . Вы даже можете упомянуть, что существуют специальные символы, которые позволяют пользователям получить доступ к некоторым индексам, созданным как часть этой обработки, но что они выходят за рамки вводной виньетки.

Опять же, это всего лишь предложения. Мы очень ценим вашу усердную работу (и работу Мэтта).

В сб, 17 января 2015 г., в 18:22, Марк Данезе [email protected]
написал:

Это действительно здорово. Хотелось бы, чтобы он существовал год назад, когда я начал использовать
Таблица данных. Вот пара мелочей на ваше рассмотрение:

Спасибо.

Возможно, вы захотите упомянуть, что вы можете сортировать (по порядку) в i в вашем
резюме в конце. Вы также можете упомянуть об этом в начале.

Ох, хватит! Отличный момент. Я должен добавить "заказ (..)" в самом начале, и
также добавлю к резюме.

Вы также можете упомянуть, что есть более сложные соединения, которые можно
сделано в i с ключами, на которые не распространяется действие. Это позволяет вам упомянуть
основные функции i, чтобы читатель мог искать более продвинутые
функции, если они им нужны.

Хорошо, подойдет.

И вы можете гиперссылку на них позже.

Я не уверен ... поскольку они предназначены для отправки в CRAN, а также
на WIKI ..

В разделе .SD вы пишете «эта группа», но это может быть более понятным
скажите "эта группа определена с помощью". Это также будет сделано немного позже, так как
хорошо.

Я думал, что отредактировал его до «текущей группы», но, видимо, нет .. »
текущая группа, определенная с помощью by "- как это звучит?

Я мог бы это пропустить, но было бы неплохо внести ясность
что .SD с помощью по существу ограничивает данные столбцами .SD, а затем
создает набор data.tables для каждой уникальной комбинации переменных
в мимо. Затем он обрабатывает эти таблицы data.tables в следующем порядке:
переменные, использующие функцию (ы) из j.

Я думаю, ты это пропустил. Это прямо под цитатой блока, где .SD - это
объяснено (в разделе 2e). И это в точности объясняет то, что вы здесь упоминаете ...

Вы даже можете упомянуть, что есть специальные символы, которые позволяют пользователям
доступ к некоторым индексам, созданным как часть этой обработки, но это
они выходят за рамки вступительной виньетки.

Правильно ... это причина того, что не вводятся другие специальные символы.

Опять же, это всего лишь предложения. Ваш тяжелый труд (и Мэтта) очень
оценен.

Отличные предложения. Я напишу ответ, как только загрузю другие виньетки.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -70375167
.

Я не уверен ... поскольку они предназначены для отправки в CRAN, а также
на WIKI ..

AFAIK, когда вы отправляете пакет в CRAN, который включает Rmd в каталоге vignettes они будут автоматически построены для проверки успешности сборки виньетки, но исходный код в CRAN будет содержать виньетки (html), уже созданные вы, а не тот из CRAN build / check.
CRAN - хорошее место для виньеток, так как для многих пользователей это первое место, где можно найти документы / учебные пособия, поэтому я думаю, что стоит иметь их в CRAN.

И вы можете гиперссылку на них позже.

Я не уверен ... так как они предназначены для отправки в CRAN, а также на WIKI ..

Не работают ли ссылки на отдельные папки на CRAN? Я на самом деле ничего там не помещал, но эта виньетка связывает несколько других в той же папке с помощью относительных ссылок и отлично работает с R (очевидно, что ссылка не из R, но если вы установите пакет и запустите виньетки, ссылки Работа.

Обновлено виньеткой _Reference Semantics_.

еще раз спасибо за все это.

еще одно предложение о том, что можно охватить виньеткой - использование data.table внутри вашей собственной функции. не пишу пакет, а просто пытаюсь автоматизировать некоторые общие задачи. есть некоторые уловки, в которых я не совсем понял. также, если где-то есть сообщение по этой теме, ссылка будет оценена.

наконец, виньетка со списком «полезных» сообщений о переполнении стека может быть полезна для тем, которые вы не хотите включать в виньетку.

просто какие-то случайные мысли.

Две мысли:

  • Ссылка на виньетки в вики
  • В виньетке эталонной семантики добавьте, как использовать: = с выражением списка в кавычках (или просто назначением в кавычках). Возможно, это заслуживает отдельной виньетки, так как NSE (нестандартная оценка) в data.table упрощает интерактивное использование, но требует, чтобы для использования data.table в вашей собственной функции или пакете вы теперь должны кое-что о quote, eval, replace и друзьях. Может быть, просто добавить что-то вроде dt [, do.call (": =", eval (my_quoted_list)] в виньетку, а затем создать виньетку по NSE и ее последствиям?

Спасибо.

  1. Вы видели это ?
  2. Скорее всего, это будет отдельная виньетка. Но пока нет планов.

@arunsrinivasan Нет, я этого не видел, отлично! Другая закладка

Обновлено с _Keys и быстрым двоичным поиском на основе subset_ vignette.

Очень хорошо. Обожаю эти виньетки. Просто несколько быстрых комментариев для рассмотрения.

Какова цель присвоения имен строк, если они не используются? Или они используются специальными операторами в j (например, .N, .I и т. Д.)? Я думаю, что они используются data.table, но не как индексы. Меня всегда смущало назначение нумерованных имен строк.

Зачем использовать unique в первом ключе при доступе только ко второму? Если вы этого не сделаете, вы получите много повторяющихся строк на выходе, верно? Может быть, очевидно, но было бы полезно сказать / показать, что произойдет, если вы этого не сделаете.

Все ли ключи нужно указывать? Даже числовые (целые)? Можете ли вы использовать цифру в качестве ключа? Есть ли на что обратить внимание?

Что, если в вашем ключевом столбце есть NA? Можете ли вы найти их и заменить (как в вашем примере, где вы заменили 24 на 0?

Это может помочь объяснить, что keyby применяется к _output_ data.table ( ans в вашем примере), а не к таблице input data.table ( flights в вашем примере).

Можете ли вы передать вектор ключу? Другими словами, можете ли вы создать airport <- c("LGA", "JFK", "EWR") и использовать airport непосредственно в i в вашем примере внизу? Это может помочь создать идею передачи другой таблицы data.table для слияния.

Опечатка в слове «соответствующий» («корреспондирующий»). Одна из обратных меток отсутствует в разделе векторного сканирования, где вы пишете «Индексы строк, соответствующие origin ==« LGA »иdest ==« TPA », получены с использованием подмножества на основе ключей».

@markdanese относительно

Зачем использовать unique в первом ключе при доступе только ко второму?

flights[.(unique(origin), "MIA")]

Не уверен, что вы очень просите предложить лучшее объяснение или вы не знаете о более сложном использовании нескольких ключей столбцов.
Вы не можете просто использовать двоичный поиск по dest когда ваш ключ c(origin, dest) , у вас должен быть c(dest, origin) чтобы использовать двоичный поиск по dest . Использование .(unique(origin), "MIA") использует двоичный поиск, предоставляя все доступные значения для первого столбца в ключе, а затем выборочные значения для второго столбца.
Я сделал расширение, чтобы использовать только выборочные столбцы из ключа. просмотр простого примера также может помочь вам понять. Мое расширение не готово к PR для мастера data.table, поскольку использование памяти не масштабируется так хорошо, как могло бы, если бы оно было разработано с использованием внутренних функций data.table / в сочетании со вторичным ключом data.table.

Можете ли вы использовать цифру в качестве ключа?

В качестве ключа можно использовать число, оно упоминается в разделе Keys and their properties .

Есть ли на что обратить внимание?

Не уверен, но setNumericRounding влияет на числовую клавишу, возможно, стоит упомянуть в виньетке.

Что, если в вашем ключевом столбце есть NA? Можете ли вы найти их и заменить

Да, is.na() оптимизирован для использования двоичного поиска. Попробуйте data.table(a=c(1,NA_real_),b=c("a","b"),key="a")[.(NA_real_), .SD ,verbose=TRUE]

Также к @arunsrinivasan , опечатка в:

найти подходящие vlaues в

Спасибо, Ян - это действительно полезно. Я предложил эти вопросы как вещи, которые можно кратко упомянуть в виньетке, чтобы помочь новым пользователям понять, что происходит. Это были вещи, которые приходили в голову (как довольно новому пользователю) при чтении документации. Я не могу внести свой вклад в код, поэтому я надеюсь внести свой вклад, помогая с документацией.

Пт, 23 января 2015 г., в 20:48, Марк Данезе [email protected]
написал:

Очень хорошо. Обожаю эти виньетки. Просто несколько быстрых комментариев для
рассмотрение.

Какова цель присвоения имен строк, если они не используются? Или
они используются специальными операторами в j (например, .N, .I и т. д.)? я думаю они
используются data.table, но не как индексы. я всегда был
сбит с толку целью принудительного ввода пронумерованных имен строк.

Раздел 1a, чуть выше ключей и их свойств, отвечает на этот вопрос.
Data.tables _inherit_ from data.frames.

Зачем использовать unique в первом ключе при доступе только ко второму? если ты
нет, вы получаете много повторяющихся строк на выходе, верно? Может быть очевидно,
но может быть полезно сказать / показать, что произойдет, если вы этого не сделаете.

Опять же, это точно объясняется под вопросом «что здесь происходит?». я
даже обратитесь к предыдущему разделу, где я закладываю основу для
объясняя это.

Все ли ключи нужно указывать? Даже числовые (целые)? Можете ли вы использовать
числовой как ключ? Есть ли на что обратить внимание?

Вот пример с целочисленными столбцами на 2d. Я думал, что это было
достаточный?

Что, если в вашем ключевом столбце есть NA? Можете ли вы найти их и заменить
их (как в своем примере, где вы заменили 24 на 0?

Хорошая точка зрения. В этом разница с векторным сканированием. Постараюсь добавить это.

Это может помочь объяснить, что keyby применяется к _output_ data.table (
ans в вашем примере), а не во входной таблице data.table (полеты в вашем
пример).

«keyby» уже обсуждалось в первой виньетке. Но я посмотрю, если это
можно добавить.

Можете ли вы передать вектор ключу? Другими словами, можете ли вы создать аэропорт
<- c ("LGA", "JFK", "EWR") и используйтеairportdirectly ini` в вашем примере рядом с
дно? Это может помочь создать идею передачи другого
data.table для слияния.

Контент для следующего раздела. Так мы переходим в соединения.

Опечатка в слове «соответствующий» («корреспондирующий»). Один из обратных клещей -
отсутствует в разделе векторной развертки, где вы пишете "Индексы строк
соответствующие origin == "LGA" иdest == "TPA" `получаются с использованием ключа
на основе подмножества ".

Спасибо.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -71253738
.

Отличная работа над этими виньетками!
Мои комментарии могут быть запоздалыми или уже рассмотренными:

  • Я хотел бы увидеть множество способов / примеров использования динамических строк и столбцов.
  • Более обширное сравнение слияний и объединений.
  • Различные / более богатые способы использования set . Кроме того, было бы неплохо увидеть объяснение, почему следующее выдает ошибку (см. Здесь ):
for (j in  valCols)
   set(dt_,  
    i = which(is.na(dt_[[j]])),
    j = j, 
    value= as.numeric(originTable[[j]]))

В Wiki добавлена виньетка Reshape .

Отличный функционал и виньетка! Спасибо Арун

Во вторник, 23 июня 2015 г., 21:02 Арун [email protected] написал:

Добавлена ​​виньетка Reshape
https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reshape.html
в Wiki https://github.com/Rdatatable/data.table/wiki/Getting-started.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/Rdatatable/data.table/issues/944#issuecomment -114678716
.

человеку за patterns было бы хорошо. Отличная виньетка

Разве для использования этих команд не требуется загружать reshape2? Если да, то об этом следует упомянуть. Мне очень нравится акцент на «от широкого к длинному» и «от длинного к широкому». Я абсолютно ненавижу синтаксис reshape2 (например, я думаю, что make_wide намного понятнее, чем dcast). По этой причине я бы не стал записывать заголовки разделов как «плавление data.tables» и «преобразование data.tables». Это имеет смысл только для тех, кто знаком с пакетом reshape2. Я мог бы начать с заголовков, которые более универсальны, как указано выше («от длинных до широких»).

Как бы то ни было, я не могу запустить первую строку виньетки, используя новый сеанс R с загруженной только таблицей data.table. Понятия не имею, почему (возможно, режим должен быть "w", а не "wb"), но
DT = fread("https://raw.githubusercontent.com/wiki/Rdatatable/data.table/data/melt_default.csv")
возвращается
Error in download.file(input, tt, mode = "wb") : unsupported URL scheme

Как всегда, спасибо за это. Это действительно полезно.

@markdanese спасибо за отличный отзыв.

  1. reshape2 не потребуется от data.table v1.9.6 . Это также обновлено в виньетке.
  2. В заголовки и другие места добавлены «от широкого к длинному» и от «от длинного к широкому», чтобы не запутать людей, которые плохо знакомы с этой темой.
  3. Функциональность https в fread реализована в devel версии. Таким образом, вы пока не сможете запустить этот код с помощью v1.9.4 . Либо обновите, либо подождите немного :-).

Спасибо за вашу поддержку.

@jangorecki patterns() не будет экспортирован. Использование будет расширено на [.data.table для выбора столбцов, := , .SDcols т. Д.

@arunsrinivasan все же может помочь руководство для patterns , точно так же есть руководство для := . Просто потому, что многие люди (я думаю) используют ?fun чтобы понять код, который они читают.

В виньетке _join_, возможно, стоит добавить соответствующие SQL-примеры соединений data.table, чтобы их было легче подобрать для ребят из db.
Примеры соответствующего оператора SQL можно найти, например, в SO Как объединить (объединить) фреймы данных (внутренние, внешние, левые, правые)? .

Также было бы здорово иметь виньетки "Беженцы" -

  • data.table для пользователей Stata
  • data.table для пользователей SQL
  • data.table для пользователей Matlab
  • data.table для пользователей Python / pandas
  • даже data.table для пользователей dplyr

и т. д. Как краткое руководство, но ориентированное на эмигрантов.

Добавлена ​​виньетка Secondary indices and auto indexing . Это должно позволить плавный переход от подмножеств к объединениям для следующей виньетки, над которой я буду работать.

@arunsrinivasan больше не подходит, чтобы не использовать _secondary_ по отношению к _indices_? он использовался для _keys_ там, где это было важно. Теперь кажется излишним, когда мы переключаемся на именование _index_.

@jangorecki Я думаю, что "вторичный" полезен в связи с ключами (первичными), возможно:

Вторичная сортировка

Лучшее описание?

но уже использовалось слово _index_, оно выглядит лучше, чем _secondary sorting_ :)

Так вы бы просто назвали это «автоматическая индексация»? ИМО «вторичная сортировка и автоматическое индексирование» кажется более информативным

_auto_ может вводить в заблуждение, поскольку индексы должны работать для _auto_ создания индекса, а также для использования индексов, созданных вручную - # 1422 устраняет текущее ограничение в этом вопросе.

Понятно. Мне все еще не хватает вашей предпочтительной альтернативы - просто «Индексы»?

не идеально, но предпочтительнее _вторичных индексов_

Мне очень нравится эта последняя виньетка. Моя единственная мысль заключалась в том, что было бы полезно упомянуть, какие типы операций вызывают удаление индекса. Из моего тестирования кажется, что почти все, что меняет количество строк или любую операцию, связанную с индексированным столбцом.

Я подумал, что примеры «on» были действительно полезными.

@markdanese хороший момент, добавлю.

Спасибо за обновленные виньетки с выпуском v1.9.8.
«Ссылочная семантика» относится к функции copy() и ее новым возможностям по созданию мелких копий (особенно внутри функций, что меня действительно интересует):

«Однако мы могли бы дополнительно улучшить эту функциональность за счет мелкого копирования вместо глубокого копирования. Фактически, мы очень хотели бы предоставить эту функциональность для версии v1.9.8 . Мы

Но виньетка с дизайном отсутствует, и ссылка указывает на старую проблему. Справочное руководство не предоставляет больше информации о copy() чем та, которая предоставлена ​​в виньетке. Остальные виньетки не содержат никакой информации о copy .

Скоро ли эта виньетка станет доступной?

+1 для внутренней виньетки. Я (и я предполагаю, что несколько других) весьма заинтересован в том, чтобы немного поработать на стороне C, но меня немного пугает (в его нынешнем виде) 35 тыс. Строк кода C ... довольно кривая обучения, чтобы идти только это »- интро к внутреннему устройству могло творить чудеса!

Хотел вмешаться и спросить, принимаются ли вклады в виньетку от участников, не связанных с кодом (таких как я). Я особенно заинтересован в том, чтобы внести свой вклад в виньетку с присоединениями, поскольку у меня изначально было довольно много проблем с этим, и я был ориентирован на решения из ответов Аруна на Stackoverflow, и мне бы хотелось получить некоторые рекомендации о том, как это сделать, если это разрешено.

@arunsrinivasan Я вижу, что у вас есть точка IDateTime vignette . Возможно, его можно было бы включить в более общую виньетку, предложенную @jangorecki : timeseries - заказанные наблюдения ?

Кроме того, я готовлю черновик по некоторым темам, предложенным ян . Возможно, некоторые его части могут быть актуальны и для совместной виньетки? Я рад поделиться, если кому-то это пригодится.

@zeomal такой вклад был бы очень ценным и очень ценным!

@MichaelChirico , спасибо. @ Henrik-P, будет ли ваше брифинг по обычным объединениям исчерпывающим - т.е. вы больше сосредоточитесь на таймсериях? Если нет, я могу начать работу над этим - я еще не использовал подвижные соединения, поэтому никаких знаний там нет. :)

@zeomal Надеюсь, я скоро смогу загрузить первый черновик, так что вы сможете взглянуть на него. В моем черновике я привожу простой пример «нормального» соединения для одной переменной time, когда есть несовпадающие строки. Я использую nomatch = NA . (может быть, также быстрый пример с nomatch = NULL )

Моя идея заключалась в том, что это простое соединение могло бы предоставить контекст и ощущение проблемы, которые я затем рассмотрю более подробно в следующих разделах о скользящих и неэквивалентных соединениях и др.

Большое спасибо за вашу готовность внести свой вклад! .

У меня вопрос по присоединению по ссылке при подготовке виньеток. X[Y, new_col := old_col] выполняет нечто похожее на традиционное левое соединение для X . Однако, если есть несколько совпадений с ключами Y в X , сохраняется только последнее (или первое?) Совпадающее значение ключа. Это где-то явно задокументировано? Я попытался найти это обратно, когда столкнулся с этим, но мне пришлось прибегнуть к моему пониманию обновления по ссылке по этой причине. Для воспроизводимого примера:

> X = data.table(a = c(1, 2, 3), m = c("a", "b", "c"))
> Y = data.table(b = c(1, 1, 4), n = c("x", "y", "z"))
> X[Y, new_col := i.n, on = "a == b"]
   a m new_col
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

# an ideal left join - expected behaviour per a new user, given below
# not possible because updating row by reference isn't implemented
   a m new_col
1: 1 a       x
1: 1 a       y
2: 2 b    <NA>
3: 3 c    <NA>

Это ожидаемое поведение, но не совсем простое для нового пользователя. mult также не влияет на вывод. Есть предложения, как я это документирую? Добавить merge в качестве обходного пути для правильного левого соединения?

@zeomal, пожалуйста, set .

@zeomal Если вы хотите проверить, насколько кратко мое отношение к нормальным (равным) объединениям, я просто хочу сообщить вам, что я разместил PR на виньетке таймсерии .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги