apeescape2.com
  • メイン
  • Kpiと分析
  • 人とチーム
  • アジャイルタレント
  • 製品の担当者とチーム
バックエンド

Rでデータの変更を後押し

R言語は、統計学者やデータサイエンティストの言語として認識されることがよくあります。かなり昔、これはほとんど真実でした。ただし、長年にわたって、Rがパッケージを介して提供する柔軟性により、Rはより汎用的な言語になりました。 Rは1995年にオープンソース化され、それ以来 Rパッケージのリポジトリは絶えず成長しています 。それでも、Pythonのような言語と比較すると、Rはデータに強く基づいています。

データについて言えば、表形式のデータは最も一般的に使用されるデータ型の1つであるため、特に注意を払う必要があります。これは、データベースで知られているテーブル構造に対応するデータ型であり、各列は異なる型にすることができ、その特定のデータ型の処理パフォーマンスは多くのアプリケーションにとって重要な要素です。

Rは、表形式データの非常に効率的なデータ変更に使用できます。



Rは、表形式データの非常に効率的なデータ変更に使用できます。 つぶやき

この記事では、表形式のデータ変換を効率的に実現する方法を紹介します。たくさんの Rを使う人 すでに機械学習のためにそれを認識していません データの改ざん Rでより高速に実行でき、別のツールを使用する必要がありません。

Rの高性能ソリューション

ベースRはdata.frameを導入しましたそれ以前のS-PLUSをベースにした1997年のクラス。データを行ごとに格納する一般的に使用されるデータベースとは異なり、R data.frameデータを列指向の構造としてメモリに格納するため、分析で一般的な列操作のキャッシュ効率が向上します。さらに、Rは関数型プログラミング言語ですが、開発者にそれを強制するものではありません。両方の機会は、 data.table Rパッケージ。CRANリポジトリで入手できます。操作をグループ化するときに非常に高速に実行され、特定のタスクに必要な列のみをマテリアライズするなど、中間データサブセットのマテリアライズに注意することで特にメモリ効率が高くなります。また、そのを通じて不要なコピーを回避します 参照セマンティクス 列の追加または更新中。パッケージの最初のバージョンは2006年4月に公開され、大幅に改善されましたdata.frameその時のパフォーマンス。最初のパッケージの説明は次のとおりです。

恒久的な給与転換への契約

このパッケージはほとんど何もしません。その存在の唯一の理由は、ホワイトブックがdata.frameに行名が必要であると指定していることです。このパッケージは、data.frameと同じように動作するが、使用するメモリが最大10倍少なく、作成(およびコピー)が最大10倍高速になる新しいクラスdata.tableを定義します。また、[]内の式のようなsubset()およびwith()を許可する機会もあります。ほとんどのコードは、row.namesを操作するコードを削除して基本関数からコピーされます。

それ以来、両方のdata.frameおよびdata.table実装は改善されましたが、data.tableベースRよりも信じられないほど高速なままです。実際、data.tableベースRよりも高速であるだけでなく、次のようなツールと競合する、利用可能な最速のオープンソースデータラングリングツールの1つであるように見えます。 Pythonパンダ 、および列指向ストレージデータベースまたはビッグデータアプリのような スパーク 。分散共有インフラストラクチャでのパフォーマンスはまだベンチマークされていませんが、1つのインスタンスで最大20億行を使用できることで、有望な見通しが得られます。卓越したパフォーマンスは、 機能性 。さらに、時間のかかる部分を並列化してパフォーマンスを段階的に向上させる最近の取り組みにより、パフォーマンスの限界を押し上げる方向が非常に明確になっているようです。

データ変換の例

Rはインタラクティブに機能するため、学習が少し簡単になります。そのため、例を段階的に追って、いつでも各ステップの結果を確認できます。始める前に、data.tableをインストールしましょうCRANリポジトリからのパッケージ。

install.packages('data.table')

役立つヒント :先頭に疑問符を付けて名前を入力するだけで、任意の関数のマニュアルを開くことができます。つまり、?install.packagesです。

Rへのデータのロード

さまざまな形式やデータベースからデータを抽出するためのパッケージがたくさんあり、多くの場合、ネイティブドライバーが含まれています。からデータをロードします CSV ファイル、生の表形式データの最も一般的な形式。次の例で使用されているファイルは次のとおりです。 ここに 。 CSVについて気にする必要はありませんfreadとしての読み取りパフォーマンスその上で機能が高度に最適化されています。

パッケージの関数を使用するには、libraryを使用して関数をロードする必要があります。コール。

library(data.table) DT <- fread('flights14.csv') print(DT) ## year month day dep_delay arr_delay carrier origin dest air_time ## 1: 2014 1 1 14 13 AA JFK LAX 359 ## 2: 2014 1 1 -3 13 AA JFK LAX 363 ## 3: 2014 1 1 2 9 AA JFK LAX 351 ## 4: 2014 1 1 -8 -26 AA LGA PBI 157 ## 5: 2014 1 1 2 1 AA JFK LAX 350 ## --- ## 253312: 2014 10 31 1 -30 UA LGA IAH 201 ## 253313: 2014 10 31 -5 -14 UA EWR IAH 189 ## 253314: 2014 10 31 -8 16 MQ LGA RDU 83 ## 253315: 2014 10 31 -4 15 MQ LGA DTW 75 ## 253316: 2014 10 31 -5 1 MQ LGA SDF 110 ## distance hour ## 1: 2475 9 ## 2: 2475 11 ## 3: 2475 19 ## 4: 1035 7 ## 5: 2475 13 ## --- ## 253312: 1416 14 ## 253313: 1400 8 ## 253314: 431 11 ## 253315: 502 11 ## 253316: 659 8

データをさらに処理するために適切にモデル化されていない場合は、データをロングからワイドまたはワイドからロングに再形成する必要があるため(別名 ピボット そして ピボット解除 )フォーマット、?dcastを見るかもしれませんおよび?meltから知られている関数 reshape2 パッケージ。ただし、data.table data.table /data.frameクラスのより高速でメモリ効率の高いメソッドを実装します。

data.tableを使用したクエリ構文

data.frameに精通している場合

クエリdata.tableクエリdata.frameと非常によく似ています。 iでフィルタリング中引数を指定すると、$を使用して列名にアクセスしなくても、列名を直接使用できます。 df[df$col > 1, ]のような手話。次の引数jを指定するとき、data.tableのスコープで評価される式を指定します。非式を渡すにはj引数はwith=FALSEを使用します。 data.frameには存在しない3番目の引数メソッドは、グループを定義し、jで式を作成しますグループによって評価されます。

# data.frame DF[DF$col1 > 1L, c('col2', 'col3')] # data.table DT[col1 > 1L, .(col2, col3), ...] # by group using: `by = col4`

データベースに精通している場合

クエリdata.table多くの点で、より多くの人が精通している可能性のあるSQLクエリに対応しています。 DT以下はdata.tableを表しますオブジェクトであり、SQLに対応しますFROM句。

DT[ i = where, j = select | update, by = group by] [ having, ... ] [ order by, ... ] [ ... ] ... [ ... ]

Tabluarデータのもつれを解く

ccorpまたはscorp

行の並べ替えと列の並べ替え

データの並べ替えは時系列にとって重要な変換であり、データの抽出と表示のためのインポートでもあります。ソートは、行の順序の整数ベクトルをiに提供することで実現できます。引数、data.frameと同じ方法。クエリの最初の引数order(carrier, -dep_delay) carrierで昇順でデータを選択しますdep_delayのフィールドと降順測定します。 2番目の引数jは、前のセクションで説明したように、返される列(または式)とその順序を定義します。

ans <- DT[order(carrier, -dep_delay), .(carrier, origin, dest, dep_delay)] head(ans) ## carrier origin dest dep_delay ## 1: AA EWR DFW 1498 ## 2: AA JFK BOS 1241 ## 3: AA EWR DFW 1071 ## 4: AA EWR DFW 1056 ## 5: AA EWR DFW 1022 ## 6: AA EWR DFW 989

参照によってデータを並べ替えるには、特定の順序でデータをクエリする代わりに、set*を使用します。機能。

setorder(DT, carrier, -dep_delay) leading.cols <- c('carrier','dep_delay') setcolorder(DT, c(leading.cols, setdiff(names(DT), leading.cols))) print(DT) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1241 2014 4 15 1223 JFK BOS 39 ## 3: AA 1071 2014 6 13 1064 EWR DFW 175 ## 4: AA 1056 2014 9 12 1115 EWR DFW 198 ## 5: AA 1022 2014 6 16 1073 EWR DFW 178 ## --- ## 253312: WN -12 2014 3 9 -21 LGA BNA 115 ## 253313: WN -13 2014 3 10 -18 EWR MDW 112 ## 253314: WN -13 2014 5 17 -30 LGA HOU 202 ## 253315: WN -13 2014 6 15 10 LGA MKE 101 ## 253316: WN -13 2014 8 19 -30 LGA CAK 63 ## distance hour ## 1: 1372 7 ## 2: 187 13 ## 3: 1372 10 ## 4: 1372 6 ## 5: 1372 7 ## --- ## 253312: 764 16 ## 253313: 711 20 ## 253314: 1428 17 ## 253315: 738 20 ## 253316: 397 16

ほとんどの場合、必要ありません どちらも 元のデータセットと順序付け/ソートされたデータセット。デフォルトでは、R言語は、他の関数型プログラミング言語と同様に、ソートされたデータを新しいオブジェクトとして返すため、参照によるソートの2倍のメモリが必要になります。

C ++学習プロジェクト

サブセットクエリ

フライトの起点「JFK」と6から9までの月のサブセットデータセットを作成しましょう。2番目の引数では、結果をリストされた列にサブセット化し、1つの計算変数sum_delayを追加します。

ans <- DT[origin == 'JFK' & month %in% 6:9, .(origin, month, arr_delay, dep_delay, sum_delay = arr_delay + dep_delay)] head(ans) ## origin month arr_delay dep_delay sum_delay ## 1: JFK 7 925 926 1851 ## 2: JFK 8 727 772 1499 ## 3: JFK 6 466 451 917 ## 4: JFK 7 414 450 864 ## 5: JFK 6 411 442 853 ## 6: JFK 6 333 343 676

デフォルトでは、単一列にデータセットをサブセット化する場合data.tableその列のインデックスを自動的に作成します。これにより、 リアルタイム その列でのそれ以上のフィルタリング呼び出しに応答します。

データセットを更新する

参照による新しい列の追加は、:=を使用して実行されます。演算子を使用すると、変数をデータセットに割り当てます。これにより、データセットのメモリ内コピーが回避されるため、新しい変数ごとに結果を割り当てる必要がありません。

DT[, sum_delay := arr_delay + dep_delay] head(DT) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1241 2014 4 15 1223 JFK BOS 39 ## 3: AA 1071 2014 6 13 1064 EWR DFW 175 ## 4: AA 1056 2014 9 12 1115 EWR DFW 198 ## 5: AA 1022 2014 6 16 1073 EWR DFW 178 ## 6: AA 989 2014 6 11 991 EWR DFW 194 ## distance hour sum_delay ## 1: 1372 7 2992 ## 2: 187 13 2464 ## 3: 1372 10 2135 ## 4: 1372 6 2171 ## 5: 1372 7 2095 ## 6: 1372 11 1980

一度に変数を追加するには、DT[, := (sum_delay = arr_delay + dep_delay)] を使用できます。 .(sum_delay = arr_delay + dep_delay)に似た構文データセットからクエリを実行する場合。

iと組み合わせるだけで、参照によってサブ割り当てし、特定の行のみを更新することができます。引数。

DT[origin=='JFK', distance := NA] head(DT) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1241 2014 4 15 1223 JFK BOS 39 ## 3: AA 1071 2014 6 13 1064 EWR DFW 175 ## 4: AA 1056 2014 9 12 1115 EWR DFW 198 ## 5: AA 1022 2014 6 16 1073 EWR DFW 178 ## 6: AA 989 2014 6 11 991 EWR DFW 194 ## distance hour sum_delay ## 1: 1372 7 2992 ## 2: NA 13 2464 ## 3: 1372 10 2135 ## 4: 1372 6 2171 ## 5: 1372 7 2095 ## 6: 1372 11 1980

集計データ

データを集約するために、3番目の引数byを提供します。角括弧に。次に、jでデータを実際に集計できるように、集計関数呼び出しを提供する必要があります。 .N jで使用される記号引数は、各グループのすべての観測値の数に対応します。前述のように、集計は行および選択列のサブセットと組み合わせることができます。

ans <- DT[, .(m_arr_delay = mean(arr_delay), m_dep_delay = mean(dep_delay), count = .N), .(carrier, month)] head(ans) ## carrier month m_arr_delay m_dep_delay count ## 1: AA 10 5.541959 7.591497 2705 ## 2: AA 4 1.903324 3.987008 2617 ## 3: AA 6 8.690067 11.476475 2678 ## 4: AA 9 -1.235160 3.307078 2628 ## 5: AA 8 4.027474 8.914054 2839 ## 6: AA 7 9.159886 11.665953 2802

多くの場合、行の値をグループ全体の集計と比較する必要があります。 SQLでは、 によるパーティション上の集計 :AVG(arr_delay) OVER (PARTITION BY carrier, month)。

ans <- DT[, .(arr_delay, carrierm_mean_arr = mean(arr_delay), dep_delay, carrierm_mean_dep = mean(dep_delay)), .(carrier, month)] head(ans) ## carrier month arr_delay carrierm_mean_arr dep_delay carrierm_mean_dep ## 1: AA 10 1494 5.541959 1498 7.591497 ## 2: AA 10 840 5.541959 848 7.591497 ## 3: AA 10 317 5.541959 338 7.591497 ## 4: AA 10 292 5.541959 331 7.591497 ## 5: AA 10 322 5.541959 304 7.591497 ## 6: AA 10 306 5.541959 299 7.591497

これらの集計を使用してデータをクエリするのではなく、参照によって実際のテーブル更新に配置するだけの場合は、:=を使用してそれを実現できます。オペレーター。これにより、データセットのメモリ内コピーが回避されるため、結果を新しい変数に割り当てる必要がありません。

DT[, `:=`(carrierm_mean_arr = mean(arr_delay), carrierm_mean_dep = mean(dep_delay)), .(carrier, month)] head(DT) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1241 2014 4 15 1223 JFK BOS 39 ## 3: AA 1071 2014 6 13 1064 EWR DFW 175 ## 4: AA 1056 2014 9 12 1115 EWR DFW 198 ## 5: AA 1022 2014 6 16 1073 EWR DFW 178 ## 6: AA 989 2014 6 11 991 EWR DFW 194 ## distance hour sum_delay carrierm_mean_arr carrierm_mean_dep ## 1: 1372 7 2992 5.541959 7.591497 ## 2: NA 13 2464 1.903324 3.987008 ## 3: 1372 10 2135 8.690067 11.476475 ## 4: 1372 6 2171 -1.235160 3.307078 ## 5: 1372 7 2095 8.690067 11.476475 ## 6: 1372 11 1980 8.690067 11.476475

データセットに参加する

データセットのベースRの結合とマージは、特殊なタイプと見なされます サブセット 操作。最初の角括弧引数iで結合するデータセットを提供します。 iに提供されたデータセットの各行について、[を使用するデータセットの行を照合します。一致する行のみを保持したい場合( 内部結合 )、次に追加の引数nomatch = 0Lを渡します。 onを使用します両方のデータセットを結合する列を指定する引数。

# create reference subset carrierdest <- DT[, .(count=.N), .(carrier, dest) # count by carrier and dest ][1:10 # just 10 first groups ] # chaining `[...][...]` as subqueries print(carrierdest) ## carrier dest count ## 1: AA DFW 5877 ## 2: AA BOS 1173 ## 3: AA ORD 4798 ## 4: AA SEA 298 ## 5: AA EGE 85 ## 6: AA LAX 3449 ## 7: AA MIA 6058 ## 8: AA SFO 1312 ## 9: AA AUS 297 ## 10: AA DCA 172 # outer join ans <- carrierdest[DT, on = c('carrier','dest')] print(ans) ## carrier dest count dep_delay year month day arr_delay origin ## 1: AA DFW 5877 1498 2014 10 4 1494 EWR ## 2: AA BOS 1173 1241 2014 4 15 1223 JFK ## 3: AA DFW 5877 1071 2014 6 13 1064 EWR ## 4: AA DFW 5877 1056 2014 9 12 1115 EWR ## 5: AA DFW 5877 1022 2014 6 16 1073 EWR ## --- ## 253312: WN BNA NA -12 2014 3 9 -21 LGA ## 253313: WN MDW NA -13 2014 3 10 -18 EWR ## 253314: WN HOU NA -13 2014 5 17 -30 LGA ## 253315: WN MKE NA -13 2014 6 15 10 LGA ## 253316: WN CAK NA -13 2014 8 19 -30 LGA ## air_time distance hour sum_delay carrierm_mean_arr ## 1: 200 1372 7 2992 5.541959 ## 2: 39 NA 13 2464 1.903324 ## 3: 175 1372 10 2135 8.690067 ## 4: 198 1372 6 2171 -1.235160 ## 5: 178 1372 7 2095 8.690067 ## --- ## 253312: 115 764 16 -33 6.921642 ## 253313: 112 711 20 -31 6.921642 ## 253314: 202 1428 17 -43 22.875845 ## 253315: 101 738 20 -3 14.888889 ## 253316: 63 397 16 -43 7.219670 ## carrierm_mean_dep ## 1: 7.591497 ## 2: 3.987008 ## 3: 11.476475 ## 4: 3.307078 ## 5: 11.476475 ## --- ## 253312: 11.295709 ## 253313: 11.295709 ## 253314: 30.546453 ## 253315: 24.217560 ## 253316: 17.038047 # inner join ans <- DT[carrierdest, # for each row in carrierdest nomatch = 0L, # return only matching rows from both tables on = c('carrier','dest')] # joining on columns carrier and dest print(ans) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1071 2014 6 13 1064 EWR DFW 175 ## 3: AA 1056 2014 9 12 1115 EWR DFW 198 ## 4: AA 1022 2014 6 16 1073 EWR DFW 178 ## 5: AA 989 2014 6 11 991 EWR DFW 194 ## --- ## 23515: AA -8 2014 10 11 -13 JFK DCA 53 ## 23516: AA -9 2014 5 21 -12 JFK DCA 52 ## 23517: AA -9 2014 6 5 -6 JFK DCA 53 ## 23518: AA -9 2014 10 2 -21 JFK DCA 51 ## 23519: AA -11 2014 5 27 10 JFK DCA 55 ## distance hour sum_delay carrierm_mean_arr carrierm_mean_dep count ## 1: 1372 7 2992 5.541959 7.591497 5877 ## 2: 1372 10 2135 8.690067 11.476475 5877 ## 3: 1372 6 2171 -1.235160 3.307078 5877 ## 4: 1372 7 2095 8.690067 11.476475 5877 ## 5: 1372 11 1980 8.690067 11.476475 5877 ## --- ## 23515: NA 15 -21 5.541959 7.591497 172 ## 23516: NA 15 -21 4.150172 8.733665 172 ## 23517: NA 15 -15 8.690067 11.476475 172 ## 23518: NA 15 -30 5.541959 7.591497 172 ## 23519: NA 15 -1 4.150172 8.733665 172

ベースRサブセットとの一貫性のため、外部結合はデフォルトでRIGHT OUTERであることに注意してください。 LEFT OUTERを探している場合は、上記の例のようにテーブルを交換する必要があります。正確な動作はmergeでも簡単に制御できます。 data.tableベースRと同じAPIを使用するメソッドmerge data.frame。

列をデータセットに単純にルックアップする場合は、:=を使用して効率的に実行できます。 jの演算子参加中の引数。で説明されているように、参照によってサブ割り当てするのと同じ方法 データセットを更新する セクションでは、結合するデータセットから参照によって列を追加します。これにより、データのメモリ内コピーが回避されるため、結果を新しい変数に割り当てる必要がありません。

DT[carrierdest, # data.table to join with lkp.count := count, # lookup `count` column from `carrierdest` on = c('carrier','dest')] # join by columns head(DT) ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: AA 1498 2014 10 4 1494 EWR DFW 200 ## 2: AA 1241 2014 4 15 1223 JFK BOS 39 ## 3: AA 1071 2014 6 13 1064 EWR DFW 175 ## 4: AA 1056 2014 9 12 1115 EWR DFW 198 ## 5: AA 1022 2014 6 16 1073 EWR DFW 178 ## 6: AA 989 2014 6 11 991 EWR DFW 194 ## distance hour sum_delay carrierm_mean_arr carrierm_mean_dep lkp.count ## 1: 1372 7 2992 5.541959 7.591497 5877 ## 2: NA 13 2464 1.903324 3.987008 1173 ## 3: 1372 10 2135 8.690067 11.476475 5877 ## 4: 1372 6 2171 -1.235160 3.307078 5877 ## 5: 1372 7 2095 8.690067 11.476475 5877 ## 6: 1372 11 1980 8.690067 11.476475 5877

ために 参加中に集計 、by = .EACHIを使用します。中間結合結果を実現しない結合を実行し、その場で集計を適用するため、メモリ効率が高くなります。

ローリング結合 は珍しい機能であり、順序付けられたデータを処理するために設計されています。時間データ、および一般的な時系列の処理に完全に適合します。基本的に、結合条件で一致を次の一致する値にロールします。 rollを提供して使用します参加するときの引数。

資本予算プロセスにおける最初の管理上の考慮事項は、データの収集です。

高速オーバーラップ結合 any、within、start、endのさまざまな重複演算子を使用して、期間とその重複処理に基づいてデータセットを結合します。

に 非等価結合 等しくない条件を使用してデータセットを結合する機能は現在 開発中 。

プロファイリングデータ

データセットを探索するとき、データの品質をよりよく理解するために、主題に関する技術情報を収集したい場合があります。

記述統計

summary(DT) ## carrier dep_delay year month ## Length:253316 Min. :-112.00 Min. :2014 Min. : 1.000 ## Class :character 1st Qu.: -5.00 1st Qu.:2014 1st Qu.: 3.000 ## Mode :character Median : -1.00 Median :2014 Median : 6.000 ## Mean : 12.47 Mean :2014 Mean : 5.639 ## 3rd Qu.: 11.00 3rd Qu.:2014 3rd Qu.: 8.000 ## Max. :1498.00 Max. :2014 Max. :10.000 ## ## day arr_delay origin dest ## Min. : 1.00 Min. :-112.000 Length:253316 Length:253316 ## 1st Qu.: 8.00 1st Qu.: -15.000 Class :character Class :character ## Median :16.00 Median : -4.000 Mode :character Mode :character ## Mean :15.89 Mean : 8.147 ## 3rd Qu.:23.00 3rd Qu.: 15.000 ## Max. :31.00 Max. :1494.000 ## ## air_time distance hour sum_delay ## Min. : 20.0 Min. : 80.0 Min. : 0.00 Min. :-224.00 ## 1st Qu.: 86.0 1st Qu.: 529.0 1st Qu.: 9.00 1st Qu.: -19.00 ## Median :134.0 Median : 762.0 Median :13.00 Median : -5.00 ## Mean :156.7 Mean : 950.4 Mean :13.06 Mean : 20.61 ## 3rd Qu.:199.0 3rd Qu.:1096.0 3rd Qu.:17.00 3rd Qu.: 23.00 ## Max. :706.0 Max. :4963.0 Max. :24.00 Max. :2992.00 ## NA's :81483 ## carrierm_mean_arr carrierm_mean_dep lkp.count ## Min. :-22.403 Min. :-4.500 Min. : 85 ## 1st Qu.: 2.676 1st Qu.: 7.815 1st Qu.:3449 ## Median : 6.404 Median :11.354 Median :5877 ## Mean : 8.147 Mean :12.465 Mean :4654 ## 3rd Qu.: 11.554 3rd Qu.:17.564 3rd Qu.:6058 ## Max. : 86.182 Max. :52.864 Max. :6058 ## NA's :229797

カーディナリティ

確認できます データの一意性 uniqueNを使用して関数を作成し、すべての列に適用します。オブジェクト.SD以下のクエリでは、 S のubset D ata.table:

DT[, lapply(.SD, uniqueN)] ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: 14 570 1 10 31 616 3 109 509 ## distance hour sum_delay carrierm_mean_arr carrierm_mean_dep lkp.count ## 1: 152 25 1021 134 134 11

NA比

各列の不明な値(RではNA、SQLではNULL)の比率を計算するために、すべての列に適用する目的の関数を提供します。

MacでAndroidアプリを開発する
DT[, lapply(.SD, function(x) sum(is.na(x))/.N)] ## carrier dep_delay year month day arr_delay origin dest air_time ## 1: 0 0 0 0 0 0 0 0 0 ## distance hour sum_delay carrierm_mean_arr carrierm_mean_dep lkp.count ## 1: 0.3216654 0 0 0 0 0.9071555

データのエクスポート

表形式のデータをCSVに高速エクスポートフォーマット data.tableによっても提供されますパッケージ。

tmp.csv <- tempfile(fileext='.csv') fwrite(DT, tmp.csv) # preview exported data cat(system(paste('head -3',tmp.csv), intern=TRUE), sep=' ') ## carrier,dep_delay,year,month,day,arr_delay,origin,dest,air_time,distance,hour,sum_delay,carrierm_mean_arr,carrierm_mean_dep,lkp.count ## AA,1498,2014,10,4,1494,EWR,DFW,200,1372,7,2992,5.54195933456561,7.59149722735674,5877 ## AA,1241,2014,4,15,1223,JFK,BOS,39,,13,2464,1.90332441727168,3.98700802445548,1173

これを書いている時点では、fwrite関数はまだCRANリポジトリに公開されていません。それを使用するには、 インストールdata.table開発版 、それ以外の場合は、ベースRを使用できますwrite.csv機能しますが、高速であるとは期待しないでください。

リソース

利用可能なリソースはたくさんあります。各機能で利用できるマニュアルに加えて、特定の主題に焦点を当てたチュートリアルであるパッケージビネットもあります。それらはで見つけることができます 入門 ページ。さらに、 プレゼンテーション このページには、data.tableの30を超える資料(スライド、ビデオなど)がリストされています。世界中のプレゼンテーション。また、コミュニティのサポートは何年にもわたって成長し、最近、StackOverflowで4000番目の質問に到達しましたdata.tableタグ、まだ回答された質問の高い比率(91.9%)を持っています。以下のプロットは、data.tableの数を示しています。時間の経過に伴うStackOverflowのタグ付き質問。

data.tableの毎月のSO質問-data.tableタグ付きの質問のみで、data.table(承認済み)の回答がある質問はありません

data.tableの毎月のSO質問-data.tableタグ付きの質問のみで、data.table(承認済み)の回答がある質問はありません

概要

この記事では、data.tableを使用したRでの効率的な表形式データ変換の選択例を示します。パッケージ。パフォーマンスの実際の数値は、再現可能なベンチマークを探すことで調べることができます。 data.tableに関する要約ブログ投稿を公開しましたと呼ばれるR言語の上位50の評価されたStackOverflow質問のソリューション data.tableを使用して一般的なRの問題を効率的に解決します 、多くの図と再現可能なコードを見つけることができます。パッケージdata.tableグループ化操作には高速基数順序のネイティブ実装を使用し、高速サブセット/結合にはバイナリ検索を使用します。この基数の順序は、バージョンからベースRに組み込まれています。 3.3.0 。さらに、アルゴリズムは最近H2O機械学習プラットフォームに実装され、H2Oクラスター上で並列化されました。 10B x10B行で効率的な大結合を可能にする 。

関連: Supergroup.jsを使用した究極のインメモリデータ収集操作

モバイルアプリの設計で最もよくある10の間違い

モバイルデザイン

モバイルアプリの設計で最もよくある10の間違い
マークダウンを学ぶ:ソフトウェア開発者のためのライティングツール

マークダウンを学ぶ:ソフトウェア開発者のためのライティングツール

技術

人気の投稿
Ember.js開発者が犯す8つの最も一般的な間違い
Ember.js開発者が犯す8つの最も一般的な間違い
なぜ私はNode.jsを使うのでしょうか?ケースバイケースのチュートリアル
なぜ私はNode.jsを使うのでしょうか?ケースバイケースのチュートリアル
強化学習の詳細
強化学習の詳細
成長の成長:このオープンソースコードを使用して独自のコホート分析を実行します
成長の成長:このオープンソースコードを使用して独自のコホート分析を実行します
書体を選択する際のヒントと考慮事項(インフォグラフィック付き)
書体を選択する際のヒントと考慮事項(インフォグラフィック付き)
 
Android TVの開発–大画面が登場します、準備をしてください!
Android TVの開発–大画面が登場します、準備をしてください!
更新可能なD3.jsチャートに向けて
更新可能なD3.jsチャートに向けて
開発者向けのiOS9スポットライト検索の謎を解き明かす
開発者向けのiOS9スポットライト検索の謎を解き明かす
第一印象–UXのオンボーディングガイド
第一印象–UXのオンボーディングガイド
共謀:iOSのMultipeerConnectivityを使用した近くのデバイスネットワーキング
共謀:iOSのMultipeerConnectivityを使用した近くのデバイスネットワーキング
人気の投稿
  • マテリアルデザインの使い方
  • SpringBootグローバル例外ハンドラ
  • gulp-clean-css
  • デビットカードのハッキングにお金を追加する
  • 2016年に化粧品に費やされたお金
  • javascriptでAPIを作成する方法
カテゴリー
投資家と資金調達 その他 財務プロセス 技術 Uxデザイン 革新 収益と成長 ブランドデザイン Kpiと分析 計画と予測

© 2021 | 全著作権所有

apeescape2.com