サーチ…


前書き

data.tableパッケージは、時間の経過と共に多くの変更と革新を受けました。従来のコードを見たり、古いブログ投稿を見直したりするのに役立ついくつかの落とし穴があります。

ユニークで重複したデータはキー付きデータでは機能しなくなりました。

これは、data.table> = 1.9.8に移動する人向けです

あなたはペットの所有者と名前のデータセットを持っていますが、いくつかの繰り返しデータがキャプチャされていると思われます。

library(data.table)
DT <- data.table(pet = c("dog","dog","cat","dog"),
                 owner = c("Alice","Bob","Charlie","Alice"),
                 entry.date = c("31/12/2015","31/12/2015","14/2/2016","14/2/2016"),
                 key = "owner")


> tables()
     NAME NROW NCOL MB COLS                 KEY  
[1,] DT      4    3  1 pet,owner,entry.date owner
Total: 1MB

表をキー入力して呼び出すと、それをソートします。アリスは二度入力されました。

> DT
   pet   owner entry.date
1: dog   Alice 31/12/2015
2: dog   Alice  14/2/2016
3: dog     Bob 31/12/2015
4: cat Charlie  14/2/2016

uniqueを使用して、キーに基づいてデータの重複を取り除いて、最新のデータ取り込み日を使用してLASTからTRUEに設定するとします。

1.9.8
clean.DT <- unique(DT, fromLast = TRUE)

> tables()
    NAME     NROW NCOL MB COLS                 KEY  
[1,] clean.DT    3    3  1 pet,owner,entry.date owner
[2,] DT          4    3  1 pet,owner,entry.date owner
Total: 2MB

アリスの複製が削除されました。

1.9.8
clean.DT <- unique(DT, fromLast = TRUE)

> tables()
     NAME     NROW NCOL MB COLS                 KEY  
[1,] clean.DT    4    3  1 pet,owner,entry.date owner
[2,] DT          4    3  1 pet,owner,entry.date owner

これは動作しません。まだ4行!

修正

by=パラメータ使用します。 これはキーではなく、デフォルトですべての列になります。

clean.DT <- unique(DT, by = key(DT), fromLast = TRUE)

今はすべてが順調です。

> clean.DT
   pet   owner entry.date
1: dog   Alice  14/2/2016
2: dog     Bob 31/12/2015
3: cat Charlie  14/2/2016

詳細と一時停止の修正

詳細については、NEWSリリースノートの項目1を参照してください。

v1.9.8の変更点(CRAN版、2016年11月25日)

潜在的に変化する変化

  1. デフォルトでは、すべての列はunique()duplicated()およびuniqueN() data.tableメソッド、#1284および#1841によって使用されます。古い動作を復元するには: options(datatable.old.unique.by.key=TRUE) 。 1年間で、この古いオプションを元に戻すオプションは、警告とともに非推奨になります。 2年後にこのオプションは削除されます。明確にするためにby=key(DT)を明示的に渡しby=key(DT)ください。デフォルトに依存しているコードのみが影響を受けます。 data.tableを使用するCRANおよびBioconductorパッケージは、リリース前にチェックされていました。 9は変更が必要であり、通知されました。テストカバレッジのないコード行は、これらのチェックによって見逃されています。 CRANまたはBioconductor以外のパッケージはチェックされませんでした。

したがって、コードが修正されるまで一時的な回避策としてオプションを使用することができます。

options(datatable.old.unique.by.key=TRUE)


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow