R:行に特定の値が含まれている場合にデータフレームから行を削除する方法(多くの列の場合)

john.abraham

多くの変数(列)と行(観測値)を持つデータフレームがあります。1データフレームの値を含む行を削除したい

私はできることを知っています

      X Y
    1 1 1
    2 2 1
    3 3 1
    4 4 4
    5 5 5

これを行う:

    test <- data.frame("X"=1:5, "Y"=c(1,1,1,4,5))

    test[test$X>1 & test$Y>1, ]

そして取得:

      X Y
    4 4 4
    5 5 5

しかし、私はdata$var1 > 1 & data$var2 > 1 ...20または50の変数を書き出して、それほど単純なことをしたくありません。

多くの書き込みをしなくても同じ結果を得るにはどうすればよいですか?


編集:Big oof:ここで提案されている3つの方法のいずれも、同じ量の観測値を生成しません。これはバグですか?多分それはNAとの相互作用の何らかの影響ですか?

方法1)

df[!apply(df[, myCols], 1, function(x) any(x == 1)),]

> any(df == 1)
[1] TRUE

方法2)

removeRowsWithOnes <- function(df) {
  rowsToRemoveIndices <- rowSums(df == 1) > 0
  return(df[!rowsToRemoveIndices,])
}

> any(df == 1)
[1] NA

方法3)(方法2とは異なる量の行を削除します))

require(tidyverse)

df %>% 
    filter(
        across(everything(), ~ . != 1)
    )

> any(df == 1)
[1] NA

編集2:naをdfに追加した後:

df <- data.frame("x"=c(1,NA,2,2,3,NA), "y"=c(NA,1,1,4,NA,NA))

   x  y
1  1 NA
2 NA  1
3  2  1
4  2  4
5  3 NA
6 NA NA

方法3)のみが期待される結果を生成します。

   x  y
1  2  4
2  3 NA
3 NA NA

編集2:

@Jonasのコメントを参照してください:

2つのメソッドを機能させるには、rowSumsおよびanyの呼び出しにna.rm = TRUEを追加します。このオプションはデフォルトでna.rm = FALSEに設定されています(ドキュメントを参照)

セルカン

別の可能な答えは使用しています tidyverse

require(tidyverse)

df %>% 
    filter(
        across(everything(), ~ . != 1)
    )

これは、データフレームにあるすべての変数にわたって、1とは異なる行を保持します。

注:お持ちの場合はNA、あなたのデータでは、このアプローチは、同様にそれらのインデックスを削除します。したがって、次の拡張機能をお勧めします。

df %>% 
    filter(
        across(everything(), ~ . != 1 | is.na(.))
    )

次にを削除せずに1とは異なるすべての値を保持ますNAそうしないと、保持するつもりだった行が削除される可能性があります(何をしているかによって異なります)。

実行時間の比較

Jonasの例に従って、すべてのソリューションのベンチマークを実行しようとしました。

# Using rowSums
removeRowsWithOnes <- function(df) {
    rowsToRemoveIndices <- rowSums(df == 1) > 0
    return(df[!rowsToRemoveIndices,])
}

# Using apply
removeRowsWithOnes2 <- function(df) {
    df[!apply(df, 1, function(x) any(x == 1)),]
}

# Using tidyversr
removeRowsWithOnes3 <- function(df) {df %>% 
    filter(
        across(everything(), ~ . != 1 | is.na(.))
    )}

ベンチマーク

n <- 1e5
set.seed(5555)
bigSampleData <- do.call("cbind",lapply(LETTERS, function(nam) setNames(data.frame(sample(1:1000,n,replace = TRUE)),nam)))
microbenchmark::microbenchmark(removeRowsWithOnes(bigSampleData),removeRowsWithOnes2(bigSampleData),removeRowsWithOnes3(bigSampleData),times=10)

結果

Unit: milliseconds
                               expr       min        lq      mean    median        uq      max neval cld
  removeRowsWithOnes(bigSampleData)  35.57471  40.54827  77.64570  41.06107  60.34422 217.3363    10  b 
 removeRowsWithOnes2(bigSampleData) 217.34171 222.35136 227.90565 227.05570 229.02625 240.9274    10   c
 removeRowsWithOnes3(bigSampleData)  17.42338  22.24363  23.34607  22.88563  23.72934  32.0293    10 a 

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

特定のデータが含まれている場合にファイルから行を削除する方法

分類Dev

特定の値(R、dplyr)が含まれている場合は、データフレームから行を削除します

分類Dev

列に特定の値が含まれている場合は、パンダデータフレームの行をドロップします。

分類Dev

3つの列がすでに別の行に表示されている場合は、データフレームから行を削除します

分類Dev

列の % に指定された値よりも小さい値がある場合、データ フレームから行を削除する方法は?

分類Dev

Pandasデータフレームの特定の列にnull値がある場合、行を削除します

分類Dev

すべての列に特定のパターンが含まれている場合は、パンダデータフレームの行を選択します

分類Dev

'value'がこのデータフレーム列に含まれていない場合(この 'values'のリストから)、とにかくその行を追加し、他の列にNAを配置する方法

分類Dev

データフレームのセル値に5未満の文字が含まれている場合、Pythonは行を削除します

分類Dev

特定の量が特定の列にない場合にデータフレームの行を削除するにはどうすればよいですか?

分類Dev

列の値(文字列)にPythonのセット内の値のいずれかが含まれている場合、データフレームの行をフィルタリングするにはどうすればよいですか?

分類Dev

任意の行の値が別のデータフレームである場合にデータフレームから行を削除します

分類Dev

複数の列に同じデータが含まれているが交換されている場合は、パンダDataFrameから行を削除します

分類Dev

部分文字列のリストのいずれかの値がデータフレームのいずれかの列に含まれている場合は、行をフィルタリングします

分類Dev

列にテキストを実行する方法(列にデータが含まれている場合のみ)

分類Dev

値のリストがパンダデータフレームのいずれかの列に表示される場合に行を印刷する方法

分類Dev

少なくとも指定された数の列で条件が満たされない場合にデータフレーム内の行を削除する方法

分類Dev

Pythonのデータフレームで特定の行に重複する値がある場合に列全体を削除する方法

分類Dev

ある列の文字列にパンダデータフレームの別の列の単語が含まれている場合に行全体を削除する方法

分類Dev

任意の行の値が別のデータフレームである場合にデータフレームは複数の列を有する、データフレームから行を削除します

分類Dev

隣接する列に特定の値が含まれている場合、各IDのデータフレームからデータをどのように解析しますか?

分類Dev

一致する文字列が特定の値を超える場合は、パンダのデータフレームから行を削除します

分類Dev

Mongo コレクションの特定のフィールドに特定の値が含まれている場合にのみ関数を実行する方法は?

分類Dev

Python pandasデータフレーム:配列列で、最初のアイテムに特定の文字列が含まれている場合は、そのアイテムを配列から削除します

分類Dev

値がパンダデータフレームのいずれかの列に表示される場合に行を印刷する方法

分類Dev

データフレームのリスト、行に特別な文字列が含まれている場合は、データフレーム列(列の名前が異なる)を削除します

分類Dev

データフレームのリスト、行に特別な文字列が含まれている場合は、データフレーム列(列の名前が異なる)を削除します

分類Dev

列が相互に依存している場合にRデータフレームの値を計算する方法

分類Dev

列にリストが含まれている場合にデータフレームの行を複製する関数

Related 関連記事

  1. 1

    特定のデータが含まれている場合にファイルから行を削除する方法

  2. 2

    特定の値(R、dplyr)が含まれている場合は、データフレームから行を削除します

  3. 3

    列に特定の値が含まれている場合は、パンダデータフレームの行をドロップします。

  4. 4

    3つの列がすでに別の行に表示されている場合は、データフレームから行を削除します

  5. 5

    列の % に指定された値よりも小さい値がある場合、データ フレームから行を削除する方法は?

  6. 6

    Pandasデータフレームの特定の列にnull値がある場合、行を削除します

  7. 7

    すべての列に特定のパターンが含まれている場合は、パンダデータフレームの行を選択します

  8. 8

    'value'がこのデータフレーム列に含まれていない場合(この 'values'のリストから)、とにかくその行を追加し、他の列にNAを配置する方法

  9. 9

    データフレームのセル値に5未満の文字が含まれている場合、Pythonは行を削除します

  10. 10

    特定の量が特定の列にない場合にデータフレームの行を削除するにはどうすればよいですか?

  11. 11

    列の値(文字列)にPythonのセット内の値のいずれかが含まれている場合、データフレームの行をフィルタリングするにはどうすればよいですか?

  12. 12

    任意の行の値が別のデータフレームである場合にデータフレームから行を削除します

  13. 13

    複数の列に同じデータが含まれているが交換されている場合は、パンダDataFrameから行を削除します

  14. 14

    部分文字列のリストのいずれかの値がデータフレームのいずれかの列に含まれている場合は、行をフィルタリングします

  15. 15

    列にテキストを実行する方法(列にデータが含まれている場合のみ)

  16. 16

    値のリストがパンダデータフレームのいずれかの列に表示される場合に行を印刷する方法

  17. 17

    少なくとも指定された数の列で条件が満たされない場合にデータフレーム内の行を削除する方法

  18. 18

    Pythonのデータフレームで特定の行に重複する値がある場合に列全体を削除する方法

  19. 19

    ある列の文字列にパンダデータフレームの別の列の単語が含まれている場合に行全体を削除する方法

  20. 20

    任意の行の値が別のデータフレームである場合にデータフレームは複数の列を有する、データフレームから行を削除します

  21. 21

    隣接する列に特定の値が含まれている場合、各IDのデータフレームからデータをどのように解析しますか?

  22. 22

    一致する文字列が特定の値を超える場合は、パンダのデータフレームから行を削除します

  23. 23

    Mongo コレクションの特定のフィールドに特定の値が含まれている場合にのみ関数を実行する方法は?

  24. 24

    Python pandasデータフレーム:配列列で、最初のアイテムに特定の文字列が含まれている場合は、そのアイテムを配列から削除します

  25. 25

    値がパンダデータフレームのいずれかの列に表示される場合に行を印刷する方法

  26. 26

    データフレームのリスト、行に特別な文字列が含まれている場合は、データフレーム列(列の名前が異なる)を削除します

  27. 27

    データフレームのリスト、行に特別な文字列が含まれている場合は、データフレーム列(列の名前が異なる)を削除します

  28. 28

    列が相互に依存している場合にRデータフレームの値を計算する方法

  29. 29

    列にリストが含まれている場合にデータフレームの行を複製する関数

ホットタグ

アーカイブ