Как удалить столбец из таблицы r
Перейти к содержимому

Как удалить столбец из таблицы r

  • автор:

Удалить весь столбец из data.frame в R

Кто-нибудь знает, как удалить весь столбец из data.frame в R? Например, если мне дан этот файл data.frame:

и я хочу удалить второй столбец.

5 ответов

Вы можете установить его на NULL .

Как отмечалось в комментариях, вот некоторые другие возможности:

Вы можете удалить несколько столбцов с помощью:

Будьте осторожны с подмножеством матриц, хотя, как вы можете в конечном итоге с вектором:

Чтобы удалить один или несколько столбцов по имени, когда имена столбцов известны (в отличие от определения во время выполнения), мне нравится синтаксис subset() . Например. для кадра данных

чтобы удалить только столбец a , который вы могли бы сделать

и удалить столбцы b и d , которые вы могли бы сделать

Вы можете удалить все столбцы между d и b с помощью

Как я уже говорил выше, этот синтаксис работает только тогда, когда известны имена столбцов. Он не будет работать, если говорят, что имена столбцов определяются программно (т.е. назначаются переменной). Я воспроизведу это предупреждение из документации ?subset :

Внимание:

Это функция удобства, предназначенная для интерактивного использования. Для программирования лучше использовать стандартное подмножество функции, такие как ‘[‘, и, в частности, нестандартная оценка аргумента «подмножество» может иметь непредвиденные последствия.

Отправленные ответы очень хороши при работе с data.frame s. Однако эти задачи могут быть довольно неэффективными с точки зрения памяти. При больших данных удаление столбца может занять необычно большое количество времени и/или сбой из-за ошибок out of memory . Пакет data.table помогает решить эту проблему с помощью оператора := :

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

(Для полноты) Если вы хотите удалить столбцы по имени, вы можете сделать это:

Remove an entire column from a data.frame in R

Does anyone know how to remove an entire column from a data.frame in R? For example if I am given this data.frame:

and I want to remove the 2nd column.

8 Answers 8

You can set it to NULL .

As pointed out in the comments, here are some other possibilities:

You can remove multiple columns via:

Be careful with matrix-subsetting though, as you can end up with a vector:

To remove one or more columns by name, when the column names are known (as opposed to being determined at run-time), I like the subset() syntax. E.g. for the data-frame

to remove just the a column you could do

and to remove the b and d columns you could do

You can remove all columns between d and b with:

As I said above, this syntax works only when the column names are known. It won’t work when say the column names are determined programmatically (i.e. assigned to a variable). I’ll reproduce this Warning from the ?subset documentation:

Warning:

This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like ‘[‘, and in particular the non-standard evaluation of argument ‘subset’ can have unanticipated consequences.

Редактирование таблиц данных в R

Редактирование таблиц в R

В прошлый раз мы говорили о том, как загрузить данные в среду R. Следующим важным этапом является их подготовка к визуализации и статистическому анализу. Для этого нам, как правило, необходимо внести некоторые изменения в таблицу, например: удалить столбец или строку, переименовать колонку, произвести сортировку или фильтрацию данных. Многие из этих операций можно сделать в Excel. Однако, зачастую возникают ситуации, когда необходимо изменить структуру или содержание таблицы прямо в ходе анализа. И вот тут у начинающих пользователей R могут возникнуть проблемы. В этой статье мы научимся их решать.

Структура таблицы и изменение типов данных

Лучший способ для закрепления новых знаний — это практика. Поэтому мы продолжим работать с таблицей физических данных студентов одного из военных вузов «voenvuz». Итак, загрузим знакомую уже нам таблицу в Rgui (таблицу можно скачать здесь).

Функции head и str

Для того, чтобы посмотреть правильно ли загрузились данные, введем команду head(voenvuz) , которая покажет первые 6 строчек нашей таблицы. Если все загрузилось нормально, то переходим к команде str(voenvuz) , которая выведет в консоль структуру таблицы.

Функция str R

Итак, в поле «data.frame» мы видим, что наша таблица состоит из 20 строк и 6 столбцов. Под ним располагается список названий столбцов, тип данных и первые шесть элементов каждого столбца. Обратите внимание, что колонки «Name» и «Rhesus.factor» сейчас хранят в себе категориальный тип данных (Factor), а остальные — целочисленный. Компьютер вычислил это автоматически, но в нашем случае — вычислил неверно. Прежде чем мы исправим типы этих данных, немного теоретической информации.

О типах данных

Почему важно правильно распознать тип данных в столбцах таблицы? Потому что при проведении статистических тестов, информация о типе данных учитывается и влияет на результат.

В языке R можно выделить 5 основных типов данных, хранящихся в столбцах таблицы:

  • числовой (numeric);
  • целочисленный (integer);
  • текстовый (character);
  • категориальный (Factor);
  • логический (logical).

Есть также комплексный (complex) и сырой (raw) типы данных, но они редко встречаются, и поэтому я о них здесь писать не буду. Пропущенные данные обозначаются как «NA» (от англ. not available — недоступно), и тогда R игнорирует их.

Изменим типы данных на практике

Посмотрим еще раз на таблицу. Логично предположить, что столбец «Name» с именами студентов не содержит никаких категорий, поэтому, преобразуем эту колонку в обычный текстовый тип данных:

Идем дальше, столбец «Age» был правильно идентифицирован как целочисленный. А вот столбцы «Height» и «Weight» являются скорее числовыми, т.к. могут содержать промежуточные значения, например 182.5. Переделаем их из типа Integer в тип Numeric:

Последнее, что нам нужно — это изменить тип данных в столбце «Blood.group». Каждый из студентов так или иначе имеет одну из 4 групп крови, соответственно, этот столбец содержит четыре категории: «1», «2», «3», «4». Другими словами, в нем должен находиться категориальный тип данных:

В итоге, повторив команду str(voenvuz) , мы должны получить вот такую картинку.

Меняем тип данных в R

Редактирование элементов таблицы

Иногда возникают ситуации, когда необходимо вставить в таблицу столбец или строку, изменить значение элемента или название колонки. Наша таблица — не исключение и нуждается в доработке.

Добавление строк

Добавим в таблицу данные о двух новых студентах: Иване и Олеге. Для этого необходимо создать новую структуру — список (list) , В список мы по порядку вносим параметры, совпадающие со структурой таблицы (напомню, что в кавычках мы пишем нечисловые типы данных):

После, при помощи функции rbind (от англ. row bind, что дословно означает «связать строчки») мы объединим эти два списка с нашей таблицей:

Добавление столбцов

Теперь у нас в таблице два Ивана и два Олега. В данном случае хорошо было бы прописать для каждого студента свой идентификационный номер (ID), чтобы не запутаться, кто есть кто. Для этого создадим структуру, которая называется вектор (последовательность элементов одного типа). В него мы запишем последовательность от 1 до 22, так, чтобы у каждого из наших 22 студентов был свой уникальный ID:

Теперь объединим наш вектор с таблицей, воспользовавшись функцией cbind (от англ. column bind):

Не забудьте поменять тип данных нового столбца на символьный:

В качестве еще одного примера добавления новых столбцов с данными в таблицу, рассчитаем индекс массы тела (BMI) для каждого студента. Для этого, мы воспользуемся новым способом: напишем математическую формулу индекса на языке R и присвоим ей новое имя столбца «BMI» внутри нашей таблицы:

Проверьте, что получилось, используя уже знакомые нам функции head и str

Удаление строк и столбцов

Существует относительно «универсальная формула» для удаления элементов таблицы: new.data <- my.data[ , ]
Для того, чтобы корректно ее использовать необходимо запомнить несколько правил:

  1. После имени таблицы пространство внутри квадратных скобок следует разделить на две части запятой.
  2. Все, что находится до запятой, относится к строчкам, все что после — к столбцам.
  3. Поставьте минус перед номером столбца или номером строки, которую собираетесь удалить.
  4. Если таких элементов несколько, используйте функцию c(. ) : внутри скобок перечисление элементов через запятую.

В нашем случае, удалять из таблицы ничего не надо, но я покажу пару примеров, назвав «укороченные» таблицы именами «trash1», «trash2», «trash3», «trash4»:

Изменение имен столбцов и данных в ячейках:

Переименуем колонку «Rhesus.factor» на укороченное «Rhesus». Для этого нужно вызвать функцию names , написать в параметрах функции имя таблицы и номер столбца, и присвоить ему новое имя :

Изменение данные в ячейках таблицы не представляет особой сложности. В квадратных скобках прописываем координаты нужной ячейки (до запятой — строка, после запятой — столбец) и присваиваем новое значение:

Редактируем таблицу в R

После всех наших манипуляций мы должны получить вот такую таблицу данных:

Фильтрация и сортировка данных

В качестве примера, исключим из таблицы данных студентов, чей возраст больше 23 лет. Существует множество способов решения подобного рода задач, включая циклы if-else, for или while (о них будет написана отдельная статья). Однако в нашем случае хватит простого фильтра, основанного на логическом операторе «< wp-block-preformatted»> voenvuz.final <- voenvuz[voenvuz$Age <= 23, ]

Того же результата мы добьемся, если будем использовать логические операторы «>» (больше) и «!» (исключить):

Итак, мы получили финальную версию таблицы «voenvuz.final «. Осталось лишь упорядочить столбцы:

И произвести сортировку данных по имени студентов, используя функцию order :

Результат обработки данных R

После завершения редактирования таблицы, обновим имена строк, т.к. сейчас они не соответствуют действительности, и выведем таблицу на экран, введя имя таблицы в консоль:

Заключение

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

  1. сайт http://stackoverflow.com/ (уже подробно разобраны тысячи вопросов по этой теме)
  2. книгу-справочник «R book» by Michael J. Crawley (легко найти бесплатную PDF версию в интернете).

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

Здравствуйте! Хотел отфильтровать записи в своем файле ничего не получилось. Тогда взял Ваш пример и попытался отфильтровать записи прямо по Вашему примеру, но получил тоже самое. Вот R-файл
voenvuz=read.csv(«D:/progaR/voenvuz_clean.csv»,sep=»;»)
voenvuz.fin=voenvuz[voenvuz$age=23]
Это текст на консоли(фрагмент)

voenvuz voenvuz=read.csv(«D:/progaR/voenvuz_clean.csv»,sep=»;»)
> voenvuz.fin=voenvuz[voenvuz$age voenvuz
Name Age Height Weight Blood.group Rhesus.factor
1 Ivan 23 178 80 2 +
2 Peter 18 169 62 1 —
3 Oleg 22 185 77 2 +
4 Sergey 19 182 73 2 —
5 Dmitriy 25 190 93 3 +
6 Vladimir 20 166 65 1 +
7 Alexey 19 185 90 1 +
8 Alexandr 21 182 89 2 +
9 Boris 18 172 59 4 +
10 Igor 23 175 75 3 +
11 Artem 18 176 69 2 +
12 Andrey 20 184 81 3 —
ENVIRONMENT
voenvuz 20 obs of 6 variables
voenvuz.fin 0 obs of 6 variables
voenvuz.fin1 20 obs of 0 variables
с уважением Владимир

kod col.x col.y delta
1 00046949 1,000 1,000 2
2 00047069 3,000 3,000 2
3 00047070 19,000 19,000 2
4 00047071 49,000 49,000 2
5 00047072 21,000 21,000 2
356 CB128164 2,000 2
252 CB164884 1,000 2
Всем привет! Только начал изучать R и столкнулся с некой проблемой: Есть такая волшебная таблица. И задача, вывести в последний столбец разницу 2 и 3 го, и с учетом того что данные в последних строках NA, соответственно вывести в последний столбец NA2 или NA3, в зависимости от того где стоит NA. Проблема в том, что стандартные функции(о которых я еще мало знаю) удаляют строки с NA, а мне важно их сохранить и обработать.
Если у кого то будут мысли по теме, буду рад помощи. Да и еще, у меня типы данных факторы в первых трех столбцах, а последний число.

Привет, Олег! А где у тебя NA?
Столбец со значениями 1,2,3,4,5,356,252 — это что?
delta — это столбец со значениями 2?

Здравствуйте! Подскажите, пожалуйста, что я делаю не так.
У меня есть данные, записанные в одну строку «tree» в таком виде:

((ETH1567:0.07723012967,((ETH1478:0.03477412382,ETH1481:0.03998172409)100:0.01982264043,(LAV2470:0.04453502013,LAV2519:0.04666678739) и т.д. без пробелов.

Мне нужно извлечь блоки содержащие буквы и последующие цифры до знака двоеточия, т.е.: ETH1567 ETH1478 ETH1481 LAV2470 LAV2519

Я подобрал регулярку для этого: ([A-z][0-9]*)

treenames <- grep("([A-z][0-9]*)", tree, value = TRUE)

treenames
named character(0)

Перерыд весь stackoverflow и иже с ним, но ответа не нашел.
Буду благодарен за подсказку.

Здравствуйте, Данила! Вот одно из возможных решений Вашей задачи:

tree
tree1
tree2
tree3
tree4
tree4 # Your result!

P.S. я мало анализирую текстовые данные, поэтому это решение вероятно не самое элегантное, но должно работать.

Отлично, все работает, большое спасибо!

Добрый день!
После преобразования матрицы в таблицу, провожу моделирование.
Выходит такая вещь:
Warning messages:
1: In log(b$y) : NaNs produced
2: In log(b$x1) : NaNs produced
3: In log(b$x2) : NaNs produced
4: In log(b$x4) : NaNs produced
5: In log(b$x5) : NaNs produced
6: In log(b$x6) : NaNs produced

Понимаю, что с таблицей что-то не так.
Вот весь скрипт.
A<- read.table( file = "R_19.txt", head = TRUE, sep = "\t", as.is= TRUE)
A<- read.csv("Tur2.txt", header = TRUE, sep = "\t", dec = ",")
str(A)
c<-scale(A) # приводим все строки к одному размеру
c

Подскажите, пожалуйста, где ошибка? Голова кипит, не получается(

Доброго дня, Эсмира!

Спасибо за столь четко сформулированный вопрос. Пришлите мне файлы R_19.txt и Tur2.txt на почту sergey[собачка]samoedd.com

Сегодня все посмотрю и надеюсь смогу помочь 😉

Здравствуйте. Как пропустить заголовок таблицы; учесть, что заголовка нет?

В скобках функции read.table вставьте аргумент header = FALSE.

Здравствуйте! Подскажите как правильно оформить цикл и получить агрегированные данные из нескольких ресурсов гугл аналитики.

Например:
# список ресурсов
resources <- read.csv("val.csv", header = FALSE)

Потом я хочу взять в цикле каждый ресурс и получить агрегированные данные в объекте gaData по всем ресурсам функцией:

gaData <- get_ga(profileId = "resource_id",
start.date = "2019-09-01",
end.date = "2019-10-21",
metrics = "ga:sessions",
dimensions = "ga:date",
samplingLevel = "HIGHER_PRECISION",
max.results = 1000,
token = rga_auth)

Здравствуйте! Сходу ответить не смогу. Сейчас дописываю диссертацию, к сожалению совсем нет свободного времени.

Samoedd приветствую.
Вопрос
После расчетов на экране отображается таблица в таком формате

Qtr1 Qtr2 Qtr3 Qtr4
2000 119.28993 118.89396 118.10201 116.91410
2001 115.33021 114.48457 114.37718 115.00804
2002 116.37716 117.13394 117.27839 116.81051
2003 115.73031 114.20610 112.23790 109.82569
2004 106.96949 105.67921 105.95486 107.79644
2005 111.20394 112.48537 111.64071 108.66998

как ее вывести в таком формате?
2000Qtr1 119.28993
2000Qtr2 118.89396
2000Qtr3 118.10201
2000Qtr4 116.91410
2001Qtr1 115.33021
2001Qtr2 114.48457
2001Qtr3 114.37718
2001Qtr4 115.00804
2002Qtr1 116.37716
2002Qtr2 117.13394
2002Qtr3 117.27839
2002Qtr4 116.81051
….
Чтобы потом скопировать ее вставить в Exсel.

Сам пробовал искать ответ, но видимо это настолько просто, что об этом ни где не пишут. 🙂
Заранее спасибо.

Здравствуйте, Alex! Извините, был в отпуске, не смог ответить. Ваш вопрос еще актуален или уже решен?

R Language
Таблица данных

Ezoic

report this ad

Data.table — это пакет, который расширяет функциональные возможности фреймов данных из базы R, особенно улучшая их производительность и синтаксис. Подробную информацию см. В разделе «Документы» пакета в разделе « Начало работы с data.table» .

Синтаксис

  • DT[i, j, by]
    # DT [где, выберите | update | do, by]
  • DT[. ][. ]
    # цепочка
  • ################# Shortcuts, special functions and special symbols inside DT[. ]
  • . ()
    # в нескольких аргументах, заменяет список ()
  • J ()
    # in i, заменяет список ()
  • знак равно
    # in j, функция, используемая для добавления или изменения столбцов
  • .N
    # в i, общее количество строк
    # в j, количество строк в группе

  • # in j, вектор номеров строк в таблице (отфильтрованный i)
  • .sd
    # в j, текущее подмножество данных
    #, выбранный аргументом .SDcols
  • .grp
    # в j, текущий индекс подмножества данных
  • .ОТ
    # в j, список по значениям для текущего подмножества данных
  • V1, V2, .
    # имена по умолчанию для неназванных столбцов, созданных в j
  • ################# Joins inside DT[. ]
  • DT1 [DT2, on, j]
    # присоединиться к двум таблицам
  • я.*
    # специальный префикс на столбцах DT2 после объединения
  • от = .EACHI
    # специальный вариант доступен только с присоединением
  • DT1 [! DT2, on, j]
    # анти-объединение двух таблиц
  • DT1 [DT2, on, roll, j]
    # присоединиться к двум таблицам, перекатывая последний столбец в on =
  • ################# Reshaping, stacking and splitting
  • расплав (DT, id.vars, measure.vars)
    # преобразовать в длинный формат
    # для нескольких столбцов, используйте measure.vars = patterns (. )
  • dcast (DT, формула)
    # преобразовать в широкий формат
  • rbind (DT1, DT2, . )
    # stack перечислены data.tables
  • rbindlist (DT_list, idcol)
    # стек список data.tables
  • split (DT, by)
    # разбить таблицу data.table в список
  • ################# Some other functions specialized for data.tables
  • foverlaps
    # перекрытие объединяется
  • сливаться
    # другой способ соединения двух таблиц
  • задавать
    # другой способ добавления или изменения столбцов
  • fintersect, fsetdiff, funion, fsetequal, уникальный, дублированный, anyDuplicated
    # операции теории множеств со строками как элементами
  • uniqueN
    # количество отдельных строк
  • rowidv (DT, cols)
    # row ID (от 1 до .N) в каждой группе, определяемой cols
  • rleidv (DT, cols)
    # идентификатор группы (от 1 до .GRP) в каждой группе, определяемый циклами cols
  • shift (DT, n, type = c ("lag", "lead"))
    # применить оператор сдвига к каждому столбцу
  • setorder, setcolorder, setnames, setkey, setindex, setattr
    # изменять атрибуты и порядок по ссылке

замечания

Установка и поддержка

На официальном сайте пакета есть страницы вики, которые помогают начать работу, а также списки презентаций и статей со всего Интернета. Прежде чем задавать вопрос — здесь, в StackOverflow или где-либо еще — прочитайте страницу поддержки .

Загрузка пакета

Многие функции в приведенных выше примерах существуют в пространстве имен data.table. Чтобы использовать их, вам нужно сначала добавить строку, такую ​​как library(data.table) или использовать полный путь, например data.table::fread а не просто fread . Для помощи по отдельным функциям синтаксис — это help("fread") или « ?fread . Опять же, если пакет не загружен, используйте полное имя типа ?data.table::fread .

Создание таблицы данных.

Data.table — это расширенная версия класса data.frame из базы R. Таким образом, атрибут class() представляет собой вектор "data.table" "data.frame" а функции, которые работают с data.frame, также будут работа с таблицей данных. Существует множество способов создания, загрузки или принуждения к таблице данных.

строить

Не забудьте установить и активировать пакет data.table

Существует одноименный конструктор:

В отличие от data.frame , data.table не будет принуждать строки к факторам:

Читайте в

Мы можем читать из текстового файла:

В отличие от read.csv , fread будет читать строки как строки, а не как факторы.

Измените файл data.frame

Для эффективности data.table предлагает способ изменения data.frame или списка, чтобы сделать data.table на месте (без копирования или изменения его памяти):

Обратите внимание, что мы не <- присваиваем результат, так как объект DF был изменен на месте. Атрибуты класса data.frame будут сохранены:

Объект принуждения к data.table

Если у вас есть list , data.frame или data.table , вы должны использовать функцию setDT для преобразования в data.table потому что она делает преобразование по ссылке вместо создания копии (что делает as.data.table ). Это важно, если вы работаете с большими наборами данных.

Если у вас есть другой объект R (такой как матрица), вы должны использовать as.data.table чтобы принудить его к data.table .

Добавление и изменение столбцов

DT[where, select|update|do, by] используется для работы с столбцами таблицы данных.

  • Часть «где» является аргументом i
  • Часть «select | update | do» является аргументом j

Эти два аргумента обычно передаются положением вместо имени.

Ниже приведены приведенные ниже примеры

Редактирование целых столбцов

Используйте оператор := внутри j для назначения новых столбцов:

Удалите столбцы, установив NULL :

Добавьте несколько столбцов, используя многомерный формат оператора := :

Если столбцы зависят и должны быть определены последовательно, один из способов:

Синтаксис .() Используется, когда правая часть LHS := RHS — это список столбцов.

Для динамически определяемых имен столбцов используйте круглые скобки:

Столбцы также могут быть изменены с помощью set , хотя это редко необходимо:

Редактирование подмножеств столбцов

Используйте аргумент i для подмножества в строки «где» должны быть сделаны изменения:

Как и в data.frame, мы можем подмножество, используя номера строк или логические тесты. Также возможно использовать «соединение» в i , но эта более сложная задача рассматривается в другом примере.

Редактирование атрибутов столбцов

Функции, редактирующие атрибуты, такие как levels<- или names<- , фактически заменяют объект на измененную копию. Даже если он используется только в одном столбце в таблице данных. Весь объект копируется и заменяется.

Чтобы изменить объект без копий, используйте setnames для изменения имен столбцов data.table или data.frame и setattr для изменения атрибута для любого объекта.

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

Специальные символы в data.table

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

.SD вместе с lapply может использоваться для применения любой функции к нескольким столбцам по группам в data.table

Мы продолжим использовать тот же встроенный набор данных, mtcars :

Среднее значение всех столбцов в наборе данных по количеству цилиндров , cyl :

Помимо cyl , в наборе данных есть другие категориальные столбцы, такие как vs , am , gear и carb . На самом деле нет смысла воспринимать mean этих столбцов. Поэтому давайте исключаем эти столбцы. Это где .SDcols входит в картину.

.SDcols

.SDcols указывает столбцы data.table , которые включены в .SD .

Среднее значение всех столбцов (сплошные столбцы) в наборе данных по количеству передач gear , и количество цилиндров, cyl , устроенных gear и cyl :

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

  • Нет необходимости заранее определять cols_chosen . .SDcols могут напрямую принимать имена столбцов
  • .SDcols также могут непосредственно брать вектор столбчатых чисел. В приведенном выше примере это будут mtcars[ , lapply(.SD, mean), .SDcols = c(1,3:7)]

.N — сокращенное число строк в группе.

Написание кода, совместимого как с data.frame, так и с data.table

Различия в синтаксисе подмножества

data.table является одним из нескольких двумерных структур данных , доступных в R, помимо data.frame , matrix и (2D) array . Все эти классы используют очень похожий, но не идентичный синтаксис для подмножества, схему A[rows, cols] .

Рассмотрим следующие данные, хранящиеся в matrix : data.frame и data.table :

Если вы хотите быть уверенными в том, что будет возвращено, лучше быть явным .

Чтобы получить определенные строки , просто добавьте запятую после диапазона:

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

Однако они отличаются для имен без кавычек

В последнем случае mycols оцениваются как имя столбца. Поскольку dt не может найти столбец с именем mycols , возникает ошибка.

Примечание: Для версии data.table пакета priorto 1.9.8, такое поведение было несколько иначе. Все, что было в индексе столбца, было бы оценено с использованием dt в качестве среды. Таким образом, оба dt[, 2:3] и dt[, mycols] вернут вектор 2:3 . mycols втором случае mycols не mycols , потому что переменная mycols существует в родительской среде.

Стратегии обеспечения совместимости с data.frame и data.table

Есть много причин писать код, который гарантированно работает с data.frame и data.table . Возможно, вы вынуждены использовать data.frame , или вам может понадобиться поделиться некоторым кодом, который вы не знаете, как будет использоваться. Итак, для удобства есть некоторые основные стратегии для достижения этого:

  1. Используйте синтаксис, который ведет себя одинаково для обоих классов.
  2. Используйте общую функцию, которая делает то же самое, что и самый короткий синтаксис.
  3. Принудите data.table вести себя как data.frame (например: вызов определенного метода print.data.frame ).
  4. Рассматривайте их как list , который они в конечном счете.
  5. Преобразуйте таблицу в data.frame прежде чем что-либо делать (плохая идея, если это огромная таблица).
  6. Преобразуйте таблицу в таблицу data.table , если зависимости не являются проблемой.

Строки подмножества. Просто, просто используйте селектор [, ] с запятой:

Подстрочные столбцы. Если вам нужен один столбец, используйте селектор $ или [[ ]] :

Если вам нужен единый способ захватить более одного столбца, необходимо немного обжаловать:

Подстрочные «индексированные» строки. Хотя data.frame имеет row.names , data.table имеет свою уникальную key функцию. Лучше всего избегать row.names и использовать существующие оптимизации в случае data.table когда это возможно.

Получите таблицу с 1 столбцом, получите строку как вектор. Это легко понять, что мы видели до сих пор:

Установка ключей в data.table

Да, вам нужно SETKEY до 1.9.6

В прошлом (pre 1.9.6) ваша data.table установкой столбцов в качестве ключей к таблице, особенно для больших таблиц. [См. Интро-виньетку на стр. 5 от версии 2015 года, где скорость поиска была в 544 раза лучше.] Вы можете найти более старый код, используя эти установочные ключи с помощью «setkey» или установки столбца «key =» при настройке таблицы.

Установите ключ с setkey команды setkey . У вас может быть ключ с несколькими столбцами.

Проверьте ключ таблицы в таблицах ()

Обратите внимание, что это приведет к повторной сортировке ваших данных.

Теперь это не нужно

До v1.9.6 вам нужно было установить ключ для определенных операций, особенно соединяя таблицы. Разработчики data.table ускорились и внедрили функцию "on=" которая может заменить зависимость от ключей. См. « Ответ» здесь для подробного обсуждения.

В январе 2017 года разработчики написали виньетку вокруг вторичных индексов, которая объясняет синтаксис «on» и позволяет идентифицировать другие столбцы для быстрой индексации.

Создание вторичных индексов?

Аналогично ключу можно setindex(DT, key.col) или setindexv(DT, "key.col.string") , где DT — ваша таблица данных. Удалите все индексы с помощью setindex(DT, NULL) .

См. Ваши вторичные индексы с indices(DT) .

Почему вторичные индексы?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *