列の数に関係なく、データフレームに行ごとに関数を適用します

vctrd

data.frameの行ごとに関数を適用して、行の値に応じて列のタイトルを連結したいと思います。

df 
      A     B
1  TRUE  TRUE
2 FALSE  TRUE
3 FALSE FALSE

      A     B Result
1  TRUE  TRUE A / B
2 FALSE  TRUE   B
3 FALSE FALSE NA

mutate()とrowwise()を使用してdplyrについて読みましたが、列が定数ではないため、それらを適用する方法がわかりません。

行「i」の場合、次のようにします。

paste(names(df)[as.logical(df[i,])], collapse = ' / ')

どんな助けでも大歓迎です。

ありがとうございました。

akrun

データセットがそれほど大きくない場合(つまり、数百万/数十億行)、を使用applyMARGIN=1て行をループしnames、論理vectorをインデックスとして使用してベクトルのサブセットを作成し、pasteそれらを一緒に使用できます。1行でコーディングする方が簡単です。

df$Result <- apply(df, 1, FUN = function(x) paste(names(x)[x], collapse=" / "))

ただし、大きなデータセットがある場合、別のオプションは、キーと値のペアを作成し、マッチングによって値を置き換えることです。これは、上記のソリューションよりも高速です。

v1 <- do.call(paste, df)
unname(setNames(c("A / B", "B", "A", NA), do.call(paste, 
          expand.grid(rep(list(c(TRUE, FALSE)), 2))))[v1])
#[1] "A / B" "B"     NA   

または、算術演算を使用してこれを行うことができます

c(NA, "A", "B", "A / B")[1 + df[,1] + 2 * df[,2]]
#[1] "A / B" "B"     NA  

ベンチマーク

@DavidArenburgのデータセットを使用し、ここに投稿された2つのソリューションを含めます(「df」の列名を「A」と「B」に変更しました)

newPaste <- function(df) {
    v1 <- do.call(paste, df)
  unname(setNames(c("A / B", "B", "A", NA), do.call(paste, 
      expand.grid(rep(list(c(TRUE, FALSE)), 2))))[v1])
}

arith <- function(df){
     c(NA, "A", "B", "A / B")[1 + df[,1] + 2 * df[,2]]
}

microbenchmark::microbenchmark(Rowwise(df), Colwise(df), newPaste(df),arith(df))
#Unit: milliseconds
#        expr        min        lq      mean     median         uq       max neval
#  Rowwise(df) 398.024791 453.68129 488.07312 481.051431 523.466771 688.36084   100
#  Colwise(df)  25.361609  28.10300  34.20972  30.952365  35.885061  95.92575   100
# newPaste(df)  65.777304  69.07432  82.08602  71.606890  82.232980 176.66516   100
#   arith(df)   1.790622   1.88339   4.74913   2.027674   4.753279  58.50942   100

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonデータフレームは、列ごとにグループごとに関数を適用します

分類Dev

列ごとにPandasデータフレームに関数を適用する

分類Dev

pandasデータフレームに行ごとに関数を適用します

分類Dev

数値のある列のパンダデータフレームに行ごとに関数を適用します

分類Dev

列を参照しながらパンダデータフレームに関数を行ごとに適用します

分類Dev

列ごとに2つのデータフレームに複数の関数を適用する

分類Dev

データが欠落しているデータフレームの行に適用を使用し、行ごとに関数を変更します-r

分類Dev

pandasデータフレームの各列に関数を適用します

分類Dev

インデックスと列の値を入力として、パンダのデータフレームに要素ごとの関数を適用します

分類Dev

リスト内のデータフレームの列にいくつかの関数を適用します

分類Dev

繰り返しなしでデータフレームの2列ごとに関数を適用するにはどうすればよいですか?

分類Dev

データフレームの行ごとにxts関数を適用する方法

分類Dev

前の行のデータを参照するデータフレーム行に関数を適用します

分類Dev

データフレーム列に関数を適用しますか?

分類Dev

結果を元のデータフレームに保存しながら、データフレームの一部の列に関数を適用します

分類Dev

関数を列ごとにjuliaデータフレームに適用する方法

分類Dev

列に基づくデータフレームとインデックスに基づく他のデータフレームに関数を適用する

分類Dev

パンダ-異なる列からのいくつかの引数を持つデータフレームに関数を適用します

分類Dev

自己相関関数acf()をデータフレーム内のグループごとのベクトルのセットの要素に適用します

分類Dev

データフレームの複数の列に関数を適用する

分類Dev

パンダは複数の列のデータフレームに関数を適用します

分類Dev

データフレーム列に関数を適用すると、scalaがスパークします

分類Dev

列名をハードコーディングせずにdplyrを使用して関数を行ごとにデータフレームに適用する方法

分類Dev

複数の分割データフレームの行名に列を強制してから、(長さが等しくない)すべてのデータフレームに関数を適用するにはどうすればよいですか?

分類Dev

データフレーム列に関数をどのように適用しますか

分類Dev

データフレームの列に関数を適用します(列はリストです)

分類Dev

データフレームの列に関数を適用します(列はリストです)

分類Dev

データフレームのリストの列に関数を適用し、結果を追加します

分類Dev

関数のリストをRの別のデータフレームの行に適用します

Related 関連記事

  1. 1

    Pythonデータフレームは、列ごとにグループごとに関数を適用します

  2. 2

    列ごとにPandasデータフレームに関数を適用する

  3. 3

    pandasデータフレームに行ごとに関数を適用します

  4. 4

    数値のある列のパンダデータフレームに行ごとに関数を適用します

  5. 5

    列を参照しながらパンダデータフレームに関数を行ごとに適用します

  6. 6

    列ごとに2つのデータフレームに複数の関数を適用する

  7. 7

    データが欠落しているデータフレームの行に適用を使用し、行ごとに関数を変更します-r

  8. 8

    pandasデータフレームの各列に関数を適用します

  9. 9

    インデックスと列の値を入力として、パンダのデータフレームに要素ごとの関数を適用します

  10. 10

    リスト内のデータフレームの列にいくつかの関数を適用します

  11. 11

    繰り返しなしでデータフレームの2列ごとに関数を適用するにはどうすればよいですか?

  12. 12

    データフレームの行ごとにxts関数を適用する方法

  13. 13

    前の行のデータを参照するデータフレーム行に関数を適用します

  14. 14

    データフレーム列に関数を適用しますか?

  15. 15

    結果を元のデータフレームに保存しながら、データフレームの一部の列に関数を適用します

  16. 16

    関数を列ごとにjuliaデータフレームに適用する方法

  17. 17

    列に基づくデータフレームとインデックスに基づく他のデータフレームに関数を適用する

  18. 18

    パンダ-異なる列からのいくつかの引数を持つデータフレームに関数を適用します

  19. 19

    自己相関関数acf()をデータフレーム内のグループごとのベクトルのセットの要素に適用します

  20. 20

    データフレームの複数の列に関数を適用する

  21. 21

    パンダは複数の列のデータフレームに関数を適用します

  22. 22

    データフレーム列に関数を適用すると、scalaがスパークします

  23. 23

    列名をハードコーディングせずにdplyrを使用して関数を行ごとにデータフレームに適用する方法

  24. 24

    複数の分割データフレームの行名に列を強制してから、(長さが等しくない)すべてのデータフレームに関数を適用するにはどうすればよいですか?

  25. 25

    データフレーム列に関数をどのように適用しますか

  26. 26

    データフレームの列に関数を適用します(列はリストです)

  27. 27

    データフレームの列に関数を適用します(列はリストです)

  28. 28

    データフレームのリストの列に関数を適用し、結果を追加します

  29. 29

    関数のリストをRの別のデータフレームの行に適用します

ホットタグ

アーカイブ