data.tableクエリが空の結果セットを返すかどうかを確認します

hannes101

data.tableクエリによって返される結果セットが空(つまり行がゼロ)であるかどうかを確認するための専用関数があるかどうか疑問に思いました。利用可能な方法のどれが速いかを確認しようとしましたが、驚くべきことに、stock関数のnrow()使用.Nはdata.tableで使用するよりも速いようです。これは、例で使用したdata.tableのサイズによるものですか、それとも一般的には正しいですか?

dt <- structure(list(Abandon.Period = c(8135L, 1961L, 18307L, 4353L, 2270L, 7905L, 2600L, 2406L, 2286L, 2464L)
                 , Activity.Flag = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L))
                 , .Names = c("Random.Number", "Random.Integer")
                 , row.names = c(NA, -10L), class = c("data.table", "data.frame"))
microbenchmark(
    a = nrow(dt[Random.Number < 1 ,]) == 0
    ,
    b = dt[Random.Number < 1 ,.N] == 0
    , times = 1000
    )
Unit: microseconds
 expr     min       lq     mean   median      uq      max neval
    a 253.261 281.4845 306.5689 292.8045 309.407 3569.189  1000
    b 311.520 334.7630 354.3346 346.8375 361.931 3342.492  1000

編集:

dt <- data.table(Random.Number = rnorm(100000))

microbenchmark(
        a = nrow(dt[Random.Number < 1 ,]) == 0
        ,
        b = dt[Random.Number < 1 ,.N] == 0
        , times = 1000
)
Unit: milliseconds
 expr      min       lq     mean   median       uq      max neval
    a 1.203515 1.287130 1.795557 1.331504 1.438513 85.51352  1000
    b 1.021796 1.093638 1.607488 1.128352 1.191289 90.10088  1000
フランク
library(data.table)
library(microbenchmark)
n = 1e7
n_extracol = 20
dt <- data.table(Random.Number = rnorm(n))
dt[, sprintf("%02d", 1:n_extracol) := 22 ]

# test
n = nrow(dt[Random.Number < 1])
all(c(
    dt[Random.Number < 1, .N], 
    dt[, sum(Random.Number < 1)],
    length(dt[Random.Number < 1, which = TRUE]),
    dt[.(v = 1), on = .(Random.Number < v), .N],
    data.table(v = 1)[dt, on = .(v = Random.Number), roll=-Inf, .N, nomatch=0]
) == n) # TRUE

# benchmark
microbenchmark(times = 10,
    nrow = nrow(dt[Random.Number < 1])
    ,
    .N = dt[Random.Number < 1, .N]
    ,
    sum = dt[, sum(Random.Number < 1)]
    ,
    len = length(dt[Random.Number < 1, which = TRUE])
    ,
    join = dt[.(v = 1), on = .(Random.Number < v), .N]
    ,
    roll = data.table(v = 1)[dt, on = .(v = Random.Number), roll=-Inf, .N, nomatch=0]
)

私のコンピューターでの結果:

Unit: milliseconds
 expr        min         lq       mean     median         uq        max neval cld
 nrow  811.37666  929.83352  963.42572  985.02599 1016.31359 1046.15549    10  b 
   .N   73.84544   74.26404   79.61228   75.33567   75.71378  120.97063    10 a  
  sum   44.11742   44.37590   44.64419   44.54316   44.68093   45.53861    10 a  
  len   69.37396   70.19565   93.39528   70.99561   72.46614  251.16317    10 a  
 join  856.37441  861.35975  898.08747  871.39156  900.91571 1099.40732    10  b 
 roll 1469.73950 1478.51737 1513.49030 1487.32068 1499.74617 1699.44766    10   c

行を数える前に中間テーブル(すべての列を含む)を作成する必要があるため、それがnrowより悪いことかなり明らかです.N私はなぜ知らないrolljoinそう悪いですが、私は彼らが後でさらなる最適化を参照してください可能性があると思います。

合計(@akrunのアイデア)を取ることはよりもさらに高速ですが.N、私の好みのスタイルではありません。また、不等式による自動インデックス作成が実装さ.Nれた後、この方法が成功する可能性があります。とにかく、私はいつもOPのようなテストをします。

DT[query, stopifnot(.N == 0L)]

ゼロとの比較を除いて行数をまったく気にしない場合はany、の代わりに使用できますがsum、この例では少しだけ高速です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

@PathVariable Data Binderの結果がnullかどうかを確認し、404をスローする

分類Dev

Rdata.table行が別のdata.tableに存在するかどうかを確認します

分類Dev

タイプリストのdata.frame列がNULLかどうかを確認します

分類Dev

data.tableのリストに他の列の単語が含まれているかどうかを確認します

分類Dev

data.table:すべての行がキーでNAであるかどうかを確認します

分類Dev

PDOクエリが結果を返すかどうかを確認します

分類Dev

data.tableのどの行が同一であるかを確認します

分類Dev

r-data.frame列の値がnullかどうかを確認します

分類Dev

data.frame列のすべての値がダミー変数をサブセット化する整数であるかどうかを確認します。別名、列のすべての値がTRUEですか。

分類Dev

Doctrine-QueryBuilder:クエリが結果を返すかどうかを確認します(カウント)

分類Dev

data-val-requiredが存在するかどうかを確認します

分類Dev

Keras load_data()は、データのどの部分がトレインとテストセットであるかをどのように認識しますか?

分類Dev

Spring Data GemfireクエリがGemfireインデックスを使用しているかどうかをどのように判断できますか?

分類Dev

Spring Data Hibernate + Pageable:空の結果を返します

分類Dev

data.tableの任意の列(最初の列を除く)に文字列が表示されているかどうかを確認します

分類Dev

Linqクエリ(System.Data.Entity.Infrastructure.DbQuery)から結果を取得し、リストに変換します

分類Dev

特定の月がdata.tableの2つの日付列の間にあるかどうかを確認します

分類Dev

form.cleaned_dataは空のセットを返します

分類Dev

data.tableのリスト列の整数値が指定された範囲内にあるかどうかを確認する方法

分類Dev

クエリが空の結果を返すかどうかを確認するためにSparksqlでカウントする代わりの方法

分類Dev

data.table roll = "nearest"は複数の結果を返します

分類Dev

SqlAlchemyのクエリが空の結果を返すかどうかを確認するにはどうすればよいですか?

分類Dev

data.tableの個々の行の値が同一であるかどうかを確認する方法

分類Dev

サブクエリの結果が存在するかどうかを確認し、それを減算します

分類Dev

Spring Data Mongoから条件クエリを使用して結果をフェッチしながら、ドキュメントのフィールドの1つを更新します

分類Dev

Core Dataクエリは正しい値を返しますが、テーブルセルは空です

分類Dev

各呼び出しがdata.tableを返すdata.tableの行サブセットに関数を適用するにはどうすればよいですか?

分類Dev

変数がxtsまたはdata.frameであるかどうかを確認します

分類Dev

linqクエリが結果を返すかどうかを確認する最速の方法

Related 関連記事

  1. 1

    @PathVariable Data Binderの結果がnullかどうかを確認し、404をスローする

  2. 2

    Rdata.table行が別のdata.tableに存在するかどうかを確認します

  3. 3

    タイプリストのdata.frame列がNULLかどうかを確認します

  4. 4

    data.tableのリストに他の列の単語が含まれているかどうかを確認します

  5. 5

    data.table:すべての行がキーでNAであるかどうかを確認します

  6. 6

    PDOクエリが結果を返すかどうかを確認します

  7. 7

    data.tableのどの行が同一であるかを確認します

  8. 8

    r-data.frame列の値がnullかどうかを確認します

  9. 9

    data.frame列のすべての値がダミー変数をサブセット化する整数であるかどうかを確認します。別名、列のすべての値がTRUEですか。

  10. 10

    Doctrine-QueryBuilder:クエリが結果を返すかどうかを確認します(カウント)

  11. 11

    data-val-requiredが存在するかどうかを確認します

  12. 12

    Keras load_data()は、データのどの部分がトレインとテストセットであるかをどのように認識しますか?

  13. 13

    Spring Data GemfireクエリがGemfireインデックスを使用しているかどうかをどのように判断できますか?

  14. 14

    Spring Data Hibernate + Pageable:空の結果を返します

  15. 15

    data.tableの任意の列(最初の列を除く)に文字列が表示されているかどうかを確認します

  16. 16

    Linqクエリ(System.Data.Entity.Infrastructure.DbQuery)から結果を取得し、リストに変換します

  17. 17

    特定の月がdata.tableの2つの日付列の間にあるかどうかを確認します

  18. 18

    form.cleaned_dataは空のセットを返します

  19. 19

    data.tableのリスト列の整数値が指定された範囲内にあるかどうかを確認する方法

  20. 20

    クエリが空の結果を返すかどうかを確認するためにSparksqlでカウントする代わりの方法

  21. 21

    data.table roll = "nearest"は複数の結果を返します

  22. 22

    SqlAlchemyのクエリが空の結果を返すかどうかを確認するにはどうすればよいですか?

  23. 23

    data.tableの個々の行の値が同一であるかどうかを確認する方法

  24. 24

    サブクエリの結果が存在するかどうかを確認し、それを減算します

  25. 25

    Spring Data Mongoから条件クエリを使用して結果をフェッチしながら、ドキュメントのフィールドの1つを更新します

  26. 26

    Core Dataクエリは正しい値を返しますが、テーブルセルは空です

  27. 27

    各呼び出しがdata.tableを返すdata.tableの行サブセットに関数を適用するにはどうすればよいですか?

  28. 28

    変数がxtsまたはdata.frameであるかどうかを確認します

  29. 29

    linqクエリが結果を返すかどうかを確認する最速の方法

ホットタグ

アーカイブ