すべての値がNAの場合にのみ、名前付き列を削除します

rornornas

パッケージを開発していますが、all-NAである他の列を削除せずに、名前付きのall-NA列を削除したいときに問題が発生します。

これはデータフレームの例です。この例では、2つのすべてNAの列があり、これは予想され、正しいものです。

library(tidyverse)

df <- tribble(
  ~a,       ~b,    ~c,         ~d, ~AR, ~BR,
  1L, "animal", "dog",         NA,  NA,  NA,
  2L, "animal", "cat",         NA,  NA,  NA,
  3L, "animal", "rat",         NA,  NA,  NA,
  4L,  "plant", "oak", "carvalho",  NA,  NA
) %>% 
  mutate_if(is.logical, as.character)

df
#> # A tibble: 4 x 6
#>       a b      c     d        AR    BR   
#>   <int> <chr>  <chr> <chr>    <chr> <chr>
#> 1     1 animal dog   <NA>     <NA>  <NA> 
#> 2     2 animal cat   <NA>     <NA>  <NA> 
#> 3     3 animal rat   <NA>     <NA>  <NA> 
#> 4     4 plant  oak   carvalho <NA>  <NA>

reprexパッケージ(v0.3.0)によって2020-02-06に作成されました

ただし、b動物のみを表示するように列をフィルタリングするとしますそのケースでは、3すべて-NAの列を持っているでしょう:dARBR

df %>% 
  filter(b == "animal")

df
#> # A tibble: 3 x 6
#>       a b      c     d     AR    BR   
#>   <int> <chr>  <chr> <chr> <chr> <chr>
#> 1     1 animal dog   <NA>  <NA>  <NA> 
#> 2     2 animal cat   <NA>  <NA>  <NA> 
#> 3     3 animal rat   <NA>  <NA>  <NA>

reprexパッケージ(v0.3.0)によって2020-02-06に作成されました

私が開発している関数では、上記の場合、dがall-NAの場合、それは削除されますが、他のすべてのNA列は削除されないようにします。したがって、コンテンツが含まれていてもselect(-d)、列が完全に削除されるためは機能しませんd

私はすでに、、および-と組み合わせて試しましたがtidyr::drop_na成功せずに列のみを削除しました私は、パイプでうまく機能する方法を探しています。私がこれを行う唯一の方法は、パイプフレンドリーではありません。purrr::discarddplyr::select_ifall(is.na())dif(all(is.na(df$d))) df$d <- NULL

編集:

私が期待している結果は、元のdfで実行すると、元のdfとまったく同じdfを返す関数です。

df
#> # A tibble: 4 x 6
#>       a b      c     d        AR    BR   
#>   <int> <chr>  <chr> <chr>    <chr> <chr>
#> 1     1 animal dog   <NA>     <NA>  <NA> 
#> 2     2 animal cat   <NA>     <NA>  <NA> 
#> 3     3 animal rat   <NA>     <NA>  <NA> 
#> 4     4 plant  oak   carvalho <NA>  <NA>

ただし、列dがすべてNAの場合、見返りとして次のことを期待しています。

df
#> # A tibble: 3 x 5
#>       a b      c     AR    BR   
#>   <int> <chr>  <chr> <chr> <chr>
#> 1     1 animal dog   <NA>  <NA> 
#> 2     2 animal cat   <NA>  <NA> 
#> 3     3 animal rat   <NA>  <NA> 
27 ϕ 9

列名とna以外の値のカウントに、(複数の変数の場合)select_if()条件を使用してテストできます。%in%colSums()

df %>%
  filter(b == 'animal') %>%
  select_if(!names(.) %in% "d" | colSums(!is.na(.)) > 0)

# A tibble: 3 x 5
      a b      c     AR    BR   
  <int> <chr>  <chr> <chr> <chr>
1     1 animal dog   NA    NA   
2     2 animal cat   NA    NA   
3     3 animal rat   NA    NA  


df %>%
  select_if(!names(.) %in% "d" | colSums(!is.na(.)) > 0)

# A tibble: 4 x 6
      a b      c     d        AR    BR   
  <int> <chr>  <chr> <chr>    <chr> <chr>
1     1 animal dog   NA       NA    NA   
2     2 animal cat   NA       NA    NA   
3     3 animal rat   NA       NA    NA   
4     4 plant  oak   carvalho NA    NA   

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

すべての値が0またはNAの場合にのみ行を削除します

分類Dev

SQLは、一連の列のすべての値が等しい場合にのみ行を削除します

分類Dev

名前がNAの場合、名前付き文字ベクトル要素の値を取得します

分類Dev

すべての値が日付の場合、1つの列のNAを別の列の値に置き換えます

分類Dev

rのすべての値がNAまたは0の場合は、列を削除します

分類Dev

すべての値が文字列値と等しい場合、列を削除します

分類Dev

列のすべての行の-番目の文字を削除しますが、数字の後に続く場合のみ

分類Dev

名前がSQLServerの特定のパターンに従っている場合は、テーブル内のすべての列を削除します

分類Dev

前の列に値が含まれている場合は、条件付きで列に入力しますか?

分類Dev

すべての列セルにNULL値が含まれている場合は、列を削除します

分類Dev

すべての列セルにNULL値が含まれている場合は、列を削除します

分類Dev

R、接続行列、列の合計に基づいて名前付き列を削除します

分類Dev

行/列の名前がリストに表示されている場合は、マトリックスの値をNAに置き換えます

分類Dev

特定の番号が付けられた列(eventx)で値がtrueの場合、名前に同じx値を持つ別の列に値を返します(dayx)

分類Dev

SQL Access、の別の列のすべての値が指定された範囲内にある場合にのみ、1つの列の値を合計します

分類Dev

選択した列のすべての値が結果としてNAを返す場合は、データフレームの行を削除します

分類Dev

NA以外の要素のみを合計しますが、すべてのNAがNAを返す場合

分類Dev

すべての値がRで繰り返される場合は、列にNAを入力します

分類Dev

名前付き範囲のすべての値をループします

分類Dev

名前の列に部分的な値が含まれている場合は、行を保持します

分類Dev

別の文字列が前に付いていない場合にのみ文字列に一致します

分類Dev

Naが存在する場合は、行列内のすべての数値を同等の文字に置き換えます

分類Dev

別のブックに割り当てられている名前付き範囲をすべて削除します

分類Dev

mysqlですべての値がtrueの場合にのみ連結します

分類Dev

すべての列で同じ値の場合は行を削除します

分類Dev

すべての値が特定の値である場合は、列を削除します

分類Dev

名前付きベクトルから名前を削除し、値のみを取得します

分類Dev

複数の列を1つの列に貼り付けますが、NA、空白、または重複する値はすべて削除します

分類Dev

R-最後の値がNAの場合、列を削除します

Related 関連記事

  1. 1

    すべての値が0またはNAの場合にのみ行を削除します

  2. 2

    SQLは、一連の列のすべての値が等しい場合にのみ行を削除します

  3. 3

    名前がNAの場合、名前付き文字ベクトル要素の値を取得します

  4. 4

    すべての値が日付の場合、1つの列のNAを別の列の値に置き換えます

  5. 5

    rのすべての値がNAまたは0の場合は、列を削除します

  6. 6

    すべての値が文字列値と等しい場合、列を削除します

  7. 7

    列のすべての行の-番目の文字を削除しますが、数字の後に続く場合のみ

  8. 8

    名前がSQLServerの特定のパターンに従っている場合は、テーブル内のすべての列を削除します

  9. 9

    前の列に値が含まれている場合は、条件付きで列に入力しますか?

  10. 10

    すべての列セルにNULL値が含まれている場合は、列を削除します

  11. 11

    すべての列セルにNULL値が含まれている場合は、列を削除します

  12. 12

    R、接続行列、列の合計に基づいて名前付き列を削除します

  13. 13

    行/列の名前がリストに表示されている場合は、マトリックスの値をNAに置き換えます

  14. 14

    特定の番号が付けられた列(eventx)で値がtrueの場合、名前に同じx値を持つ別の列に値を返します(dayx)

  15. 15

    SQL Access、の別の列のすべての値が指定された範囲内にある場合にのみ、1つの列の値を合計します

  16. 16

    選択した列のすべての値が結果としてNAを返す場合は、データフレームの行を削除します

  17. 17

    NA以外の要素のみを合計しますが、すべてのNAがNAを返す場合

  18. 18

    すべての値がRで繰り返される場合は、列にNAを入力します

  19. 19

    名前付き範囲のすべての値をループします

  20. 20

    名前の列に部分的な値が含まれている場合は、行を保持します

  21. 21

    別の文字列が前に付いていない場合にのみ文字列に一致します

  22. 22

    Naが存在する場合は、行列内のすべての数値を同等の文字に置き換えます

  23. 23

    別のブックに割り当てられている名前付き範囲をすべて削除します

  24. 24

    mysqlですべての値がtrueの場合にのみ連結します

  25. 25

    すべての列で同じ値の場合は行を削除します

  26. 26

    すべての値が特定の値である場合は、列を削除します

  27. 27

    名前付きベクトルから名前を削除し、値のみを取得します

  28. 28

    複数の列を1つの列に貼り付けますが、NA、空白、または重複する値はすべて削除します

  29. 29

    R-最後の値がNAの場合、列を削除します

ホットタグ

アーカイブ