特定のユーザー内の連続する行を調べて、dplyrで別の列の値がいつ変更されるかを特定します

パーセルタング

次のデータがあるとしましょう

user_df = read.table(text = "person_id job_number job_type start_date end_date
                  1 1 B 2012-11-01 2014-01-01
                  1 2 A 2016-02-01 2016-10-01
                  1 3 A 2016-12-01 2020-01-01
                  1 4 B 2020-01-01 2021-01-01
                  2 1 A 2011-03-01 2012-08-01
                  2 2 B 2013-01-01 2020-01-01
                  2 3 A 2020-01-01 2021-01-01
                  2 4 B 2021-01-01 2021-01-17
                  3 1 A 2005-03-01 2011-03-01
                  3 2 B 2012-01-01 2014-01-01", header = T)

それぞれperson_idに可変数のジョブがあり、多くのタイプの1つを持つことができます(このデータセットでは、ジョブにはタイプAまたはBのみがあります。

switch現在の行のjob_type列がAで、前の列がB。の場合、1に設定された列を追加したいと思いますそれ以外の場合、値は0です。したがって、現在の行がjob_typeであるBか、現在の行がjob_typeでAあり、前の行もjob_typeである場合、値はゼロに設定されます。A

最終的なdfは次のようになります。

user_df = read.table(text = "person_id job_number job_type start_date end_date switch
                      1 1 B 2012-11-01 2014-01-01 0
                      1 2 A 2016-02-01 2016-10-01 1
                      1 3 A 2016-12-01 2020-01-01 0
                      1 4 B 2020-01-01 2021-01-01 0
                      2 1 A 2011-03-01 2012-08-01 1
                      2 2 B 2013-01-01 2020-01-01 0
                      2 3 A 2020-01-01 2021-01-01 1
                      2 4 B 2021-01-01 2021-01-17 0
                      3 1 A 2005-03-01 2011-03-01 1
                      3 2 B 2012-01-01 2014-01-01 0", header = T)

私は解決策が関与しようとしている知っているlag中でdplyr、ライブラリが、私は、この目的のためにそれを使用する方法を正確にはわかりません。

ヴィンセント

考えられるハックの1つjob_type == "A"は、数値として扱いdiff関数を適用して変化を測定することです。

tidyverse バージョン:

library(dplyr)
user_df %>%
  group_by(person_id) %>%
  mutate(switch = c(0, diff(job_type == "A")),
         switch = ifelse(switch == 1, 1, 0))

data.table バージョン:

library(data.table)
user_dt = data.table(user_df)
user_dt[, switch := c(0, diff(job_type == "A")), by = .(person_id)][
        , switch := ifelse(switch == 1, 1, 0)]
user_dt

    person_id job_number job_type start_date   end_date switch
 1:         1          1        B 2012-11-01 2014-01-01      0
 2:         1          2        A 2016-02-01 2016-10-01      1
 3:         1          3        A 2016-12-01 2020-01-01      0
 4:         1          4        B 2020-01-01 2021-01-01      0
 5:         2          1        A 2011-03-01 2012-08-01      0
 6:         2          2        B 2013-01-01 2020-01-01      0
 7:         2          3        A 2020-01-01 2021-01-01      1
 8:         2          4        B 2021-01-01 2021-01-17      0
 9:         3          1        A 2005-03-01 2011-03-01      0
10:         3          2        B 2012-01-01 2014-01-01      0

どちらのバージョンも明らかに1つのステップで実行できましたが、この方法の方がわかりやすいと思いました。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

特定の形式のユーザー入力を介してリスト内の値を変更するにはどうすればよいですか?

分類Dev

パンダでは、列内の特定の値を持つすべての行を複製して、複製内のその列の値を変更するにはどうすればよいですか?

分類Dev

ユーザーが別のテーマを選択したときに、特定のディレクティブですべてのコンポーネントの色を変更するにはどうすればよいですか?

分類Dev

ターゲット変数が特定の値であるすべて(またはほぼすべて)のNaN値を持つ列を識別します

分類Dev

すべてのユーザーについて、単一の値が存在する場合は、その値で列のすべての値を更新します

分類Dev

列データが同じで行をマージし、パンダでマージされた列の別の特定の列の値を効率的に変更するにはどうすればよいですか?

分類Dev

Rでdplyrを使用して、別の列に特定の値のセットが含まれている場合は、列をフィルター処理します

分類Dev

IDが別の列の特定の値に関連付けられているかどうかを示すブール列を追加しますか?

分類Dev

列に接続されたuserIdがあるとします。行を取得する方法には、その列のすべての一意の値にリンクするユーザーが含まれています

分類Dev

特定のユーザーの変更されたすべてのオブジェクトを検索します

分類Dev

ユーザーが特定の列の値を変更できないようにするjavascript関数

分類Dev

インストールされているアプリケーションをすべてのユーザーから特定のユーザーに変更することはできますか?

分類Dev

Pandas Dataframeは、特定の値が変更されるまで、その値を持つ行を削除します

分類Dev

特定の列の特定の行を更新して、PostgreSQLを介して別のテーブルの値を反映するにはどうすればよいですか?

分類Dev

Rallyの特定の機能に関連する1つ以上のユーザーストーリーに割り当てられているすべてのユーザーを一覧表示できますか?

分類Dev

テーブルのすべての行のいくつかの列に特定の値があるかどうかを確認します

分類Dev

Javaを使用してActiveDirectory内の特定のOUからすべてのユーザーを取得するにはどうすればよいですか?

分類Dev

1つのテーブルに挿入し、挿入されているIDの他のテーブルの値を調べて、挿入された行の1つの列を更新するようにトリガーできますか?

分類Dev

SQLは、クエリを特定のユーザーからすべてのユーザーに変更します

分類Dev

Windowsで特定のユーザーを持つすべてのユーザーの概要を取得するにはどうすればよいですか?

分類Dev

特定の(最大)値が連続して繰り返されているかどうかを確認します

分類Dev

部分文字列(または記号)が特定の列で発生する場合にのみ値を別の列にコピーします。それ以外の場合は、別の列を変更しないでくださいDataFrame

分類Dev

extjsの特定の列のすべての値を変更するにはどうすればよいですか?

分類Dev

パンダは、列の値が変わるまで、連続するすべての行を取得します

分類Dev

値が1つのテーブルの別の列からのものである追加の列を持つ特定の行を選択します

分類Dev

3つの異なる列を調べて、共通の数値を別のデータフレームの1つの列と一致させて、データをマージするにはどうすればよいですか(一致がない場合は追加します)。

分類Dev

ユーザーが特定のシートに新しい行を追加すると、同じ行が別のGoogleシートに自動的に追加されます

分類Dev

データフレーム内のNAを無視して行で連続する要素(つまり列)の変更を確認します

分類Dev

特定のユーザーによって作成されたすべてのユーザーをdjangoで表示するにはどうすればよいですか?

Related 関連記事

  1. 1

    特定の形式のユーザー入力を介してリスト内の値を変更するにはどうすればよいですか?

  2. 2

    パンダでは、列内の特定の値を持つすべての行を複製して、複製内のその列の値を変更するにはどうすればよいですか?

  3. 3

    ユーザーが別のテーマを選択したときに、特定のディレクティブですべてのコンポーネントの色を変更するにはどうすればよいですか?

  4. 4

    ターゲット変数が特定の値であるすべて(またはほぼすべて)のNaN値を持つ列を識別します

  5. 5

    すべてのユーザーについて、単一の値が存在する場合は、その値で列のすべての値を更新します

  6. 6

    列データが同じで行をマージし、パンダでマージされた列の別の特定の列の値を効率的に変更するにはどうすればよいですか?

  7. 7

    Rでdplyrを使用して、別の列に特定の値のセットが含まれている場合は、列をフィルター処理します

  8. 8

    IDが別の列の特定の値に関連付けられているかどうかを示すブール列を追加しますか?

  9. 9

    列に接続されたuserIdがあるとします。行を取得する方法には、その列のすべての一意の値にリンクするユーザーが含まれています

  10. 10

    特定のユーザーの変更されたすべてのオブジェクトを検索します

  11. 11

    ユーザーが特定の列の値を変更できないようにするjavascript関数

  12. 12

    インストールされているアプリケーションをすべてのユーザーから特定のユーザーに変更することはできますか?

  13. 13

    Pandas Dataframeは、特定の値が変更されるまで、その値を持つ行を削除します

  14. 14

    特定の列の特定の行を更新して、PostgreSQLを介して別のテーブルの値を反映するにはどうすればよいですか?

  15. 15

    Rallyの特定の機能に関連する1つ以上のユーザーストーリーに割り当てられているすべてのユーザーを一覧表示できますか?

  16. 16

    テーブルのすべての行のいくつかの列に特定の値があるかどうかを確認します

  17. 17

    Javaを使用してActiveDirectory内の特定のOUからすべてのユーザーを取得するにはどうすればよいですか?

  18. 18

    1つのテーブルに挿入し、挿入されているIDの他のテーブルの値を調べて、挿入された行の1つの列を更新するようにトリガーできますか?

  19. 19

    SQLは、クエリを特定のユーザーからすべてのユーザーに変更します

  20. 20

    Windowsで特定のユーザーを持つすべてのユーザーの概要を取得するにはどうすればよいですか?

  21. 21

    特定の(最大)値が連続して繰り返されているかどうかを確認します

  22. 22

    部分文字列(または記号)が特定の列で発生する場合にのみ値を別の列にコピーします。それ以外の場合は、別の列を変更しないでくださいDataFrame

  23. 23

    extjsの特定の列のすべての値を変更するにはどうすればよいですか?

  24. 24

    パンダは、列の値が変わるまで、連続するすべての行を取得します

  25. 25

    値が1つのテーブルの別の列からのものである追加の列を持つ特定の行を選択します

  26. 26

    3つの異なる列を調べて、共通の数値を別のデータフレームの1つの列と一致させて、データをマージするにはどうすればよいですか(一致がない場合は追加します)。

  27. 27

    ユーザーが特定のシートに新しい行を追加すると、同じ行が別のGoogleシートに自動的に追加されます

  28. 28

    データフレーム内のNAを無視して行で連続する要素(つまり列)の変更を確認します

  29. 29

    特定のユーザーによって作成されたすべてのユーザーをdjangoで表示するにはどうすればよいですか?

ホットタグ

アーカイブ