Что вы можете сделать с данными.кадр, который вы не можете С данные.стол?
Я только начал использовать R и наткнулся на данные.стол. Я нашел его блестящим.
очень наивный вопрос: Могу ли я игнорировать данные.фрейм для использования данных.таблица, чтобы избежать синтаксической путаницы между двумя пакетами?
1 ответ:
С данные.таблица часто задаваемых вопросов
FAQ 1.8 хорошо, я начинаю видеть, какие данные.таблица примерно, но почему вы не улучшили данные.рама в R? Почему это должен быть новый пакет?
как FAQ 1.1 основные моменты,
j
на[.data.table
принципиально отличается отj
на[.data.frame
. Даже что-то такое простое, какDF[,1]
нарушит существующий код во многих пакетах и пользовательский код. Это по дизайну, и мы хотим, чтобы он работал таким образом больше сложный синтаксис для работы. Есть и другие отличия (см. FAQ 2.17).кроме того,
data.table
наследует отdata.frame
. Этоdata.frame
тоже. Аdata.table
может быть передан любой пакет, который принимает толькоdata.frame
и этот пакет можно использовать[.data.frame
синтаксис наdata.table
.мы также предложили улучшения для R, где это возможно. Один из они были приняты в качестве новой функции в R 2.12.0:
unique()
иmatch()
теперь быстрее на символьных векторах, где все элементы находятся в глобальномCHARSXP
кэш и без опознавательных знаков кодирование (код ASCII). Спасибо Мэтью Доул за предложение улучшений к тому, как хэш-код генерируется вunique.
c.второе предложение было использовать
memcpy
наduplicate.c
, что значительно быстрее, чем цикл for В C. Это улучшит способ копирования R данные внутри страны (по некоторым показателям в 13 раз). Нить на r-devel здесь : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html.2.17 каковы меньшие синтаксические различия между данными.кадр и данные.стол?
DT[3]
относится к 3-й строке, ноDF[3]
относится к 3-й столбецDT[3,] == DT[3],
ноDF[,3] == DF[3]
(немного смущаясь)- по этой причине мы говорим, что запятая необязательна в DT, но не необязательна в DF
DT[[3]] == DF[3] == DF[[3]]
DT[i,]
где i-одно целое число, возвращает одну строку, как иDF[i,]
, но в отличие от матричного однорядного подмножества, которое возвращает a вектор.DT[,j,with=FALSE]
где j-одно целое число, возвращает данные одного столбца.таблица, в отличие отDF[,j]
который возвращает вектор по умолчаниюDT[,"colA",with=FALSE][[1]] == DF[,"colA"]
.DT[,colA] == DF[,"colA"]
DT[,list(colA)] == DF[,"colA",drop=FALSE]
DT[NA]
возвращает 1 строку NA, ноDF[NA]
возвращает a копия ДФ, содержащий на всей территории.- символ
NA
тип логический в R, и поэтому перерабатывается[.data.frame
. Намерение было вероятноDF[NA_integer_]
.[.data.table
делает это автоматически для удобства.DT[c(TRUE,NA,FALSE)]
трактует NA как ложь, ноDF[c(TRUE,NA,FALSE)]
возвращает NA строк
для каждогоNA
DT[ColA==ColB]
прощеDF[!is.na(ColA) & !is.na(ColB) & ColA==ColB,]
data.frame(list(1:2,"k",1:4))
создает 3 колонки,data.table
создает один столбец списка.check.names
по умолчаниюTRUE
наdata.frame
ноFALSE
наdata.table
, для удобства.stringsAsFactors
по умолчанию TRUE вdata.frame
но ложь вdata.table
, для эффективности.- поскольку глобальный кэш строк был добавлен в R, элементы символов являются указателем на одну кэшированную строку, и больше нет a преимущество представления покрывать к фактору.
- атомарные векторы в Столбцах списка сворачиваются при печати с использованием ", " в данных.рамка, но ", " в данных.таблица с конечной запятой после 6-й пункт, чтобы избежать случайной печати больших встроенных объектов.
- на
[.data.frame
мы очень часто ставлюdrop=FALSE
. Когда мы забываем, ошибки могут возникнуть в крайних случаях, когда выбираются отдельные столбцы и все внезапно возвращается вектор, а не один столбец данные.рамка. В[.data.table
мы воспользовались возможностью, чтобы сделать это последовательное и капли.- при данные.таблица передается в данные.таблица-не знают пакет, что пакет он не связан с любой из этих различий; он просто работает
маленький нюанс
возможно, будут случаи, когда некоторые пакеты используют код, который падает при задании данных.кадр, однако, учитывая, что
data.table
постоянно поддерживается, чтобы избежать таких проблем, любые проблемы, которые могут возникнуть будут исправлены в кратчайшие сроки.например
из новостей для v 1.8.2
- base::unname(DT) теперь работает снова, как это необходимо plyr:: melt(). Благодаря Кристоф Якель за репортаж. Тест добавлен.
- мере.данные.метод frame был добавлен для ITime, так что ITime может быть передан в ggplot2 без ошибок, #1713. Спасибо Фаррелу Бучинскому за репортаж. Добавлены тесты. Метки оси ITime являются по-прежнему отображается как целое число секунд от полуночи; мы не знаем, почему ggplot2 не вызывает ITime как.символьный метод. Преобразование ITime в POSIXct для ggplot2-это один из подходов.