タグ付けされた質問 「data.table」

R data.tableパッケージは、高速のメモリ内データ分析のために構築されたdata.frameの拡張です。Shiny(DT)でDataTablesパッケージにdtタグを使用します。

3
data.table対dplyr:他の人ができないことやうまくできないことはできますか?
概観 私はに比較的慣れていますがdata.table、にはあまり詳しくありませんdplyr。私はSOに現れたdplyrビネットと例をいくつか読みましたが、これまでのところ、私の結論は次のとおりです。 data.tableそしてdplyrスピードに匹敵する、多くの(すなわち> 10-100K)グループがある場合を除いて、いくつかの他の状況(下のベンチマークを参照) dplyr よりアクセスしやすい構文があります dplyr 潜在的なDB相互作用を抽象化します(またはそうします) いくつかの小さな機能の違いがあります(以下の「例/使用法」を参照) 私の心の中で2.私はそれにかなり慣れているのでdata.table、それほど重くはありませんが、両方に不慣れなユーザーにとっては、それが大きな要因になることは理解しています。どちらがより直感的であるかについての議論は避けたいと思います。これは、すでに詳しい人の観点から尋ねられた私の特定の質問とは無関係であるためdata.tableです。また、「より直感的」な方が分析が速くなることについての議論は避けたいと思います(確かにそうですが、ここでも、私が最も興味を持っていることはありません)。 質問 私が知りたいのは: パッケージに精通している人にとっては、どちらか一方のパッケージを使用してコーディングする方がはるかに簡単な分析タスクがあります(つまり、必要なキーストロークと難解性の必要なレベルの組み合わせ。 あるパッケージと別のパッケージで大幅に(つまり2倍以上)より効率的に実行される分析タスクはありますか? 最近のSOの質問の 1つで、これについてもう少し考えるようになりました。それまでは、dplyr私がすでにできることをはるかに超えるとは思わなかったからdata.tableです。ここにdplyr解決策があります(Qの最後のデータ): dat %.% group_by(name, job) %.% filter(job != "Boss" | year == min(year)) %.% mutate(cumu_job2 = cumsum(job2)) これは、data.tableソリューションでのハックの試みよりもはるかに優れていました。とは言っdata.tableても、優れたソリューションもかなり優れています(Jean-Robert、Arunに感謝します。ここでは、厳密に最も最適なソリューションよりも単一のステートメントを優先したことに注意してください)。 setDT(dat)[, .SD[job != "Boss" | year == min(year)][, cumjob := cumsum(job2)], by=list(id, job) ] 後者の構文は非常に難解に思えるかもしれdata.tableませんが、慣れていれば(つまり、より難解なトリックを使用しない場合)、実際にはかなり簡単です。 理想的には私が見てみたいことはいくつかの良い例がなかったですdplyrかdata.tableより簡潔であるか、パフォーマンスが大幅に優れているか方法であるです。 例 …
759 r  data.table  dplyr 

8
data.tableの名前で列をどのように削除しますか?
で「foo」という名前の列を削除するにはdata.frame、次のようにします。 df <- df[-grep('foo', colnames(df))] ただし、いったんオブジェクトにdf変換されるとdata.table、列を削除するだけの方法はありません。 例: df <- data.frame(id = 1:100, foo = rnorm(100)) df2 <- df[-grep('foo', colnames(df))] # works df3 <- data.table(df) df3[-grep('foo', colnames(df3))] しかし、いったんdata.tableオブジェクトに変換されると、これは機能しなくなります。
194 r  data.table 

2
data.tableが別のdata.tableの(対コピー)への参照であるときを正確に理解する
の参照渡しプロパティを理解するのに少し問題がありdata.tableます。いくつかの操作は参照を「壊す」ようであり、私は何が起こっているのかを正確に理解したいと思います。 data.table別のからを作成するとdata.table(を介し<-て新しいテーブルをで更新する:=と、元のテーブルも変更されます。これは、次のように予想されます。 ?data.table::copy およびstackoverflow:pass-by-reference-the-operator-in-the-data-table-package 次に例を示します。 library(data.table) DT <- data.table(a=c(1,2), b=c(11,12)) print(DT) # a b # [1,] 1 11 # [2,] 2 12 newDT <- DT # reference, not copy newDT[1, a := 100] # modify new DT print(DT) # DT is modified too. # a b # [1,] 100 11 …

3
Rのdata.tableにおける.SDの意味
.SD便利そうに見えますが、私はそれで何をしているか本当にわかりません それは何の略ですか?先行期間があるのはなぜですか(フルストップ)。使用するとどうなりますか? 読んだ: .SDあるdata.tableのサブセットを含むxグループ列(複数可)を除く各群についてのデータを、。でグループ化するとき、でグループ化するiときby、キー付きby、および_ad hoc_を使用できます。by それは、娘data.tablesが次の操作のためにメモリに保持されることを意味しますか?
172 r  data.table 

4
2012年にPandasがRのdata.tableマージよりもPythonでマージされたのはなぜですか?
私は最近、Python のパンダライブラリに出会いました。このベンチマークによると、非常に高速なメモリ内マージを実行します。R(分析用に選択した私の言語)のdata.tableパッケージよりもさらに高速です。 なぜpandasこれよりずっと速いのですdata.tableか?PythonがRより優れているという固有の速度の利点が原因ですか、それとも私が気付いていないトレードオフがありますか?andにdata.table頼らずに内部結合と外部結合を実行する方法はありますか?merge(X, Y, all=FALSE)merge(X, Y, all=TRUE) 以下は、さまざまなパッケージのベンチマークに使用されるRコードとPythonコードです。
160 python  r  join  data.table  pandas 

8
グループごとに複数の変数を集計/要約します(例:合計、平均)
データフレームから、(凝集する簡単な方法がありsum、mean、max同時に他C)複数の変数は? 以下はサンプルデータです。 library(lubridate) days = 365*2 date = seq(as.Date("2000-01-01"), length = days, by = "day") year = year(date) month = month(date) x1 = cumsum(rnorm(days, 0.05)) x2 = cumsum(rnorm(days, 0.05)) df1 = data.frame(date, year, month, x1, x2) 年と月ごとに、データフレームのx1およびx2変数を同時に集計したいと思いdf2ます。次のコードはx1変数を集計しますが、変数を同時に集計することもできx2ますか? ### aggregate variables by year month df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE) head(df2) …

6
data.tableの参照によって行を削除する方法は?
私の質問は、参照による割り当てとでのコピーに関連していdata.tableます。同様に、参照によって行を削除できるかどうかを知りたい DT[ , someCol := NULL] 知りたい DT[someRow := NULL, ] この関数が存在しない理由は十分にあると思います。そのため、以下のように、通常のコピーアプローチに代わる優れた方法を指摘できます。特に、example(data.table)の私のお気に入りを使用すると、 DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9) # x y v # [1,] a 1 1 # [2,] a 3 2 # [3,] a 6 3 # …
150 r  data.table 

10
大きなdata.tableでNAを置き換える最速の方法
大きなdata.tableがありますあり、多くの欠損値が行と200列に散らばっています。これらのNA値をできるだけ効率的にゼロに再コーディングしたいと思います。 2つのオプションが表示されます: 1:data.frameに変換し、次のようなものを使用します 2:ある種のクールなdata.tableサブ設定コマンド タイプ1のかなり効率的なソリューションに満足します。data.frameに変換してからdata.tableに戻すのに時間がかかりません。


17
NAを最新の非NA値で置き換える
data.frame(またはdata.table)で、NAを以前の最も近い非NA値で「転送」します。(の代わりにdata.frame)ベクトルを使用する簡単な例は次のとおりです。 > y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA) 私はそのようなものfill.NAs()を構築することを可能にする関数を望みますyy: > yy [1] NA NA NA 2 2 2 2 3 3 3 4 4 この操作を多くの(合計〜1 Tb)小さなサイズdata.frame(〜30-50 Mb)で繰り返す必要があります。ここで、行はNAであり、そのエントリはすべてです。問題に取り組む良い方法は何ですか? 私が作った醜い解決策はこの関数を使っています: last <- function (x){ x[length(x)] } fill.NAs <- function(isNA){ if (isNA[1] == 1) { isNA[1:max({which(isNA==0)[1]-1},1)] <- …
141 r  data.table  zoo  r-faq 

2
rbindlistがrbindより「優れている」のはなぜですか?
私はのドキュメントをdata.table調べているところ、SO rbindlistよりも優れていると思われるSOに関する会話の一部に気づきましたrbind。 なぜがrbindlist優れているのかrbind、どのシナリオでrbindlist本当に優れているのrbindかを知りたいのですが。 メモリ使用率の点で利点はありますか?
135 r  data.table  rbind  rbindlist 

2
グループごとにdata.tableで:=を使用して複数の列を割り当てる
を使用して複数の列に割り当てる最良の方法は何data.tableですか?例えば: f <- function(x) {c("hi", "hello")} x <- data.table(id = 1:10) 私はこのようなことをしたいと思います(もちろんこの構文は間違っています): x[ , (col1, col2) := f(), by = "id"] そして、それを拡張するために、変数に名前が格納された列がたくさんある可能性があるので(たとえばcol_names)、次のようにしたいと思います。 x[ , col_names := another_f(), by = "id", with = FALSE] このようなことをする正しい方法は何ですか?

3
文字列キー「order(-x、v)」でdata.tableの行を降順に並べ替えると、data.table 1.9.4以前でエラーが発生する
のは、私は以下の持っていると言うdata.tableにはR: library(data.table) DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) 2列(たとえば、列xとv)で並べ替えます。私はこれを使いました: DT[order(x,v)] # sorts first by x then by v (both in ascending order) しかし、今、私はそれをx(降順で)ソートし、次のコードを持ちたいと思います: DT[order(-x)] #Error in -x : invalid argument to unary operator したがって、このエラーの原因は次のとおりですclass(DT$x)=character。この問題を解決するために何か提案をいただけますか? を使用できることはDT[order(x,decreasing=TRUE)]わかっていますが、両方の方法(一部は減少、一部は増加)を同時に使用して複数の列で並べ替える構文を知りたいです。 DT[order(-y,v)]結果を使用してDT[order(-x,v)]も問題ありませんが、使用するとエラーが発生することに注意してください。だから、私の質問です:このエラーを解決するには?
125 r  string  sorting  data.table  key 

3
data.tablesのX [Y]結合が完全外部結合または左結合を許可しないのはなぜですか?
これは、data.table結合構文についての哲学的な質問です。data.tablesの用途はますます増えていますが、まだ学習中です... X[Y]data.tables の結合フォーマットは非常に簡潔で、便利で効率的ですが、私が知る限り、内部結合と右外部結合のみをサポートしています。左または完全な外部結合を取得するには、以下を使用する必要がありますmerge。 X[Y, nomatch = NA] -Yのすべての行-右外部結合(デフォルト) X[Y, nomatch = 0] -XとYの両方に一致する行のみ-内部結合 merge(X, Y, all = TRUE) -XとYの両方からのすべての行-完全外部結合 merge(X, Y, all.x = TRUE) -Xのすべての行-左外部結合 X[Y]結合フォーマットが4種類の結合すべてをサポートしていると便利だと思います。2種類の結合のみがサポートされる理由はありますか? 私にとって、nomatch = 0およびnomatch = NAパラメータの値は、実行されるアクションのための非常に直感的ではありません。merge構文を理解して覚える方が簡単です:all = TRUE、all.x = TRUEおよびall.y = TRUE。X[Y]操作はにmerge非常に似ているので、関数のパラメーターではなく結合matchのmerge構文を使用してみませんか?matchnomatch 4つの結合タイプのコード例を以下に示します。 # sample X and Y data.tables library(data.table) X <- data.table(t = 1:4, …
123 r  join  data.table 

2
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] # c b a # 1: 0.8476623 3 1 # 2: 0.4787768 2 2 # 3: 0.3570803 1 3 …
118 r  data.table 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.