data.frameでできて、data.tableでできないことは何ですか?
質問
私はRを使い始めたばかりで、data.tableに出会いました。私はそれが素晴らしいことを発見しました。
非常に素朴な質問です。2つのパッケージ間の構文の混乱を避けるために、data.frameを無視してdata.tableを使用することは可能ですか?
どのように解決するのですか?
からの data.tableのFAQ
FAQ 1.8 なるほど、data.tableが何なのかわかってきましたが、なぜRのdata.frameを強化しなかったのですか?なぜ新しいパッケージでなければならないのでしょうか?
FAQ1.1が強調しているように
j
で[.data.table
は根本的に とは異なりj
で[.data.frame
. のような単純なものでさえDF[,1]
のような単純なものでも、多くのパッケージやユーザコードの既存のコードを壊してしまうでしょう。 これは意図的なものであり、より複雑な構文が動作するためにこのように動作させたいと考えています。 より複雑な構文が動作するようにするためです。他の違いもあります(FAQ 2.17).さらに
data.table
を継承しています。data.frame
. これはdata.frame
も、です。Adata.table
のみを受け付けるどのパッケージにも渡すことができます。 のみを受け付けます。data.frame
のみを受け付けるパッケージに渡すことができ、そのパッケージは[.data.frame
の構文をdata.table
.私たちは、可能な限りRの拡張も提案しました。そのうちの1つは そのうちの1つは、R 2.12.0の新機能として採用されました。
unique()
そしてmatch()
は、文字ベクトルにおいて、すべての要素がグローバルなCHARSXP
キャッシュにあり、かつ無符合 エンコーディング(ASCII)の文字ベクトルに対して高速になりました。Matthew Dowle 氏の提案に感謝します。 でのハッシュコードの生成方法について改善を提案してくれた Matthew Nowle に感謝します。unique.
c.2つ目の提案は
memcpy
でduplicate.c
これはC言語のforループよりはるかに高速です。 これはC言語のforループよりはるかに高速です。 の内部でのデータのコピー方法を改善することができます(ある尺度では13倍)。r-develのスレッド はこちらです。 http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html .
との細かい構文の違いは何ですか?
data.frame
とdata.table
DT[3]
は、3番目の 行 を指しますがDF[3]
は3番目の 列DT[3, ] == DT[3]
しかしDF[ , 3] == DF[3]
(data.frameではやや紛らわしいですが、data.tableでは一貫しています)- このような理由から、私たちはカンマが 任意 で
DT
ではオプションではありません。DF
DT[[3]] == DF[, 3] == DF[[3]]
DT[i, ]
ここでi
は1つの整数で、1つの行を返します。DF[i, ]
と同じですが、ベクトルを返す行列の一行部分集合とは異なります。DT[ , j]
ここでj
は1つの整数で、1列のdata.tableを返します。DF[, j]
とは異なり、デフォルトでベクトルを返します。DT[ , "colA"][[1]] == DF[ , "colA"]
.DT[ , colA] == DF[ , "colA"]
(現在data.table v1.9.8に含まれていますが、変更される予定です。リリースノートを参照してください)DT[ , list(colA)] == DF[ , "colA", drop = FALSE]
DT[NA]
の1行を返します。NA
を返しますがDF[NA]
のコピー全体を返します。DF
を含むNA
を含む。記号はNA
はタイプlogical
であるため、Rでリサイクルされるのは[.data.frame
. ユーザーの意図はおそらくDF[NA_integer_]
.[.data.table
は、便宜上、この可能性の高い意図に自動的に迂回します。DT[c(TRUE, NA, FALSE)]
を扱います。NA
としてFALSE
のように、しかし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は1つのカラムを作成します。list
カラムを作成します。check.names
はデフォルトでTRUE
でdata.frame
しかしFALSE
をdata.tableの中に入れておくと、便利です。stringsAsFactors
はデフォルトでTRUE
でdata.frame
しかしFALSE
をdata.tableで使用することで、効率化を図っています。Rにグローバルな文字列キャッシュが追加されたため、文字アイテムは単一のキャッシュされた文字列へのポインタとなり、変換することによるパフォーマンス上の利点はなくなりました。factor
.- の原子ベクトル
list
列の原子ベクトルは", "
でdata.frame
が、しかし","
は、大きな埋め込みオブジェクトが誤って印刷されるのを防ぐために、6番目の項目の後に末尾のカンマを付けて、data.tableに追加してください。 で[.data.frame
私たちは非常によくdrop = FALSE
. これを忘れると、単一列が選択され、突然単一列ではなくベクトルが返されるようなエッジケースでバグが発生することがあります。data.frame
. で[.data.table
は一貫性を持たせるために、この機会にdrop
. data.table が data.table 非対応パッケージに渡された場合、そのパッケージはこれらの違いを気にすることなく、ただ動作します。
小さな注意点
パッケージによっては、data.frame が与えられると落ちてしまうようなコードを使う場合があるかもしれません。
data.table
はそのような問題を回避するために常にメンテナンスされているため、問題が発生した場合は速やかに修正されます。
例えば
-
v 1.8.2 の NEWS から。
- plyr::melt() が必要とする base::unname(DT) が再び動作するようになりました。報告してくれた Christoph Jaeckel に感謝します。 Christoph Jaeckel に感謝します。テストを追加しました。
- ITimeに対してas.data.frameメソッドが追加され、ITimeをggplot2にエラーなく渡せるようになった。 にエラーなしで渡せるようになりました。報告してくれたFarrel Buchinskyに感謝します。テストが追加された。 ITime軸のラベルはまだ真夜中からの整数の秒として表示されます。 がITimeのas.characterメソッドを呼び出さない理由は不明です。ggplot2のためにITimeをPOSIXctに変換するのは、一つのアプローチです。
関連
-
R言語 - マトリックス
-
[解決済み] Rで文字列から文字を削除する
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] [Solved] data.frameで全てまたは一部のNA(欠損値)を含む行を削除する。
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み] [Solved] data.frameのカラムをベクトルに変換する?
-
[解決済み] セッションが作成されません。このバージョンのChromeDriverはChromeバージョンにしか対応していません ChromeDriver ChromeでSeleniumを使用した場合の74エラー
-
[解決済み] 2012年、なぜpythonのpandasマージはRのdata.tableマージより速かったのか?
-
[解決済み] data.tableのカラムクラスを変換する
-
[解決済み] data.tableにキーを設定する目的は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] 特定のサイズのプロットウィンドウを作成する
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み】data.frameのグループごとの平均値【重複】について
-
[解決済み] データフレームのカラムのデータ型を決定する
-
[解決済み] グループごとに最初の行を選択する