行の類似性のパーセンテージをペアごとに計算し、それを新しい列として追加します

ダニエルG

このサンプルのような日付フレームがあります。類似した行(重複していない)を見つけて、賢明な類似性を計算したいと思います。この解決策を見つけましたが、すべての列を保持し、類似度を新しい変数として追加したいと思います。私の目的は、類似性の割合が最も高いレコードを見つけることです。どうすればいいですか?

サンプルデータセット

df <- tibble::tribble(
     ~date, ~user_id, ~Station_id, ~location_id, ~ind_id, ~start_hour, ~start_minute, ~start_second, ~end_hour, ~end_minute, ~end_second, ~duration_min,
  20191015, 19900234,         242,            2,    "ac",           7,            25,             0,         7,          30,          59,             6,
  20191015, 19900234,         242,            2,    "ac",           7,            31,             0,         7,          32,          59,             2,
  20191015, 19900234,         242,            2,    "ac",           7,            33,             0,         7,          38,          59,             6,
  20191015, 19900234,         242,            2,    "ac",           7,            39,             0,         7,          40,          59,             2,
  20191015, 19900234,         242,            2,    "ac",           7,            41,             0,         7,          43,          59,             3,
  20191015, 19900234,         242,            2,    "ac",           7,            44,             0,         7,          45,          59,             2,
  20191015, 19900234,         242,            2,    "ac",           7,            47,             0,         7,          59,          59,            13,
  20191015, 19900234,         242,            2,    "ad",           7,            47,             0,         7,          59,          59,            13,
  20191015, 19900234,         242,            2,    "ac",           8,             5,             0,         8,           6,          59,             2,
  20191015, 19900234,         242,            2,    "ad",           8,             5,             0,         8,           6,          59,             2,
  20191015, 19900234,         242,            2,    "ac",           8,             7,             0,         8,           8,          59,             2,
  20191015, 19900234,         242,            2,    "ad",           8,             7,             0,         8,           8,          59,             2,
  20191015, 19900234,         242,            2,    "ac",          16,            26,             0,        16,          55,          59,            30,
  20191015, 19900234,         242,            2,    "ad",          16,            26,             0,        16,          55,          59,            30,
  20191015, 19900234,         242,            2,    "ad",          17,             5,             0,        17,           6,          59,             2,
  20191015, 19900234,         242,            2,    "ac",          17,             5,             0,        17,          23,          59,            19,
  20191015, 19900234,         242,            2,    "ad",          17,             7,             0,        17,          15,          59,             9,
  20191015, 19900234,         242,            2,    "ad",          17,            16,             0,        17,          22,          59,             7,
  20191015, 19900234,         264,            2,    "ac",          17,            24,             0,        17,          35,          59,            12,
  20191015, 19900234,         264,            2,    "ad",          17,            25,             0,        17,          35,          59,            11,
  20191016, 19900234,         242,            1,    "ac",           7,            12,             0,         7,          14,          59,             3,
  20191016, 19900234,         242,            1,    "ad",           7,            13,             0,         7,          13,          59,             1,
  20191016, 19900234,         242,            1,    "ac",          17,            45,             0,        17,          49,          59,             5,
  20191016, 19900234,         242,            1,    "ad",          17,            46,             0,        17,          48,          59,             3,
  20191016, 19900234,         242,            2,    "ad",           7,            14,             0,         8,           0,          59,            47,
  20191016, 19900234,         242,            2,    "ac",           7,            15,             0,         8,           0,          59,            47
  )

行を比較するための関数

row_cf <- function(x, y, df){
  sum(df[x,] == df[y,])/ncol(df)
}

関数出力

# 1) Create all possible row combinations
# 2) Rename 
# 3) Run through each row
# 4) Calculate similarity

expand.grid(1:nrow(df), 1:nrow(df)) %>% 
  rename(row_1 = Var1, row_2 = Var2) %>% 
  rowwise() %>% 
  mutate(similarity = row_cf(row_1, row_2, df))


# A tibble: 676 x 3
   row_1 row_2 similarity
   <int> <int>      <dbl>
 1     1     1      1    
 2     2     1      0.75 
 3     3     1      0.833
 4     4     1      0.75 
 5     5     1      0.75 
 6     6     1      0.75 
 7     7     1      0.75 
 8     8     1      0.667
 9     9     1      0.583
10    10     1      0.5 

編集:私はここのようなデータで同様の行を見つけたいです ここに画像の説明を入力してください

グレゴールトーマス

「関数出力」を使用して、それを呼び出しますsim自己比較を排除し、row_1でグループ化された最大類似性行を維持します。

sim = sim %>% 
  filter(row_1 != row_2) %>%
  group_by(row_1) %>% 
  slice(which.max(similarity))

次に、これらを元のデータに追加できます。

df %>% mutate(row_1 = 1:n()) %>%
  left_join(sim)

このrow_2列には、最も類似した行の行番号と、similarityその類似度スコアが表示されます。(これらの列名を改善することをお勧めします。)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

合計を計算し、次に行ごとの合計のパーセンテージを計算します

分類Dev

パンダ:列の2行ごとの平均を計算し、それを新しい列に配置します

分類Dev

パーセンテージを計算し、パンダを使用して新しい列を追加しようとしています

分類Dev

awkを使用して、列2から派生した列1のパーセンテージを計算し、それを列3に追加します。

分類Dev

Pythonでしきい値ごとに各列のパーセンテージをカウントして計算します

分類Dev

quanteda:2つのDFM間の行ごとにテキストの類似性を計算します

分類Dev

パーセンテージを計算し、それをデータフレームの新しい列に配置する関数を記述します

分類Dev

グループごとに1つの変数の平均を計算し、それを新しい変数として追加します

分類Dev

列ごとにグループ化してから、列のパーセンテージを計算するにはどうすればよいですか?

分類Dev

パーセンテージとしての類似性

分類Dev

パターンに一致する列をgrepして、それらの列の行平均を計算し、平均値を新しい列としてrのデータフレームに追加するにはどうすればよいですか?

分類Dev

除算を使用してMIPSのパーセンテージとしてスコアを計算します

分類Dev

類似性のパーセンテージを計算するか、3つ以上のオブジェクト間の相関を計算します

分類Dev

空白を無視して、dplyrを使用して1つの列のグループごとのパーセンテージを計算します

分類Dev

group_byによって計算されたパーセンテージをそのグループのすべての行に追加しますか?

分類Dev

pandas:別の列の値に基づいてすべての行のジャッカードの類似性を計算します

分類Dev

Rパーセンテージを計算し、新しい列として追加するにはどうすればよいですか?(例の最後の2列)

分類Dev

PySparkでの値の類似性に基づいて、キーと値のペアを減らします

分類Dev

Sparkでの値の類似性に基づいて、キーと値のペアをマップします

分類Dev

Excelで、2つの合計のパーセンテージを計算しようとしています

分類Dev

Woocommerceサンキューページとメールの注文合計に新しい行を追加します

分類Dev

文字列の類似性をパーセンテージで計算する

分類Dev

パンダ-2つのセルの類似した内容に基づいて行をマージします

分類Dev

年ごとのパフォーマンスに基づいて計算フィールドを追加します

分類Dev

ASP.NET Coreは、プロパティモデルに計算を追加し、それをデータベースの列として使用します

分類Dev

グループごとに複数の変数を合計し、それらの合計を使用して新しい列を作成します

分類Dev

新しい行を追加して、パンダの既存のデータフレームからの合計と平均を計算します

分類Dev

パンダ:複数の列のパーセンテージを計算し、結果を新しい列に保存します-最良の方法

分類Dev

Rの行列乗算を使用して行ごとのコサイン類似度を計算する

Related 関連記事

  1. 1

    合計を計算し、次に行ごとの合計のパーセンテージを計算します

  2. 2

    パンダ:列の2行ごとの平均を計算し、それを新しい列に配置します

  3. 3

    パーセンテージを計算し、パンダを使用して新しい列を追加しようとしています

  4. 4

    awkを使用して、列2から派生した列1のパーセンテージを計算し、それを列3に追加します。

  5. 5

    Pythonでしきい値ごとに各列のパーセンテージをカウントして計算します

  6. 6

    quanteda:2つのDFM間の行ごとにテキストの類似性を計算します

  7. 7

    パーセンテージを計算し、それをデータフレームの新しい列に配置する関数を記述します

  8. 8

    グループごとに1つの変数の平均を計算し、それを新しい変数として追加します

  9. 9

    列ごとにグループ化してから、列のパーセンテージを計算するにはどうすればよいですか?

  10. 10

    パーセンテージとしての類似性

  11. 11

    パターンに一致する列をgrepして、それらの列の行平均を計算し、平均値を新しい列としてrのデータフレームに追加するにはどうすればよいですか?

  12. 12

    除算を使用してMIPSのパーセンテージとしてスコアを計算します

  13. 13

    類似性のパーセンテージを計算するか、3つ以上のオブジェクト間の相関を計算します

  14. 14

    空白を無視して、dplyrを使用して1つの列のグループごとのパーセンテージを計算します

  15. 15

    group_byによって計算されたパーセンテージをそのグループのすべての行に追加しますか?

  16. 16

    pandas:別の列の値に基づいてすべての行のジャッカードの類似性を計算します

  17. 17

    Rパーセンテージを計算し、新しい列として追加するにはどうすればよいですか?(例の最後の2列)

  18. 18

    PySparkでの値の類似性に基づいて、キーと値のペアを減らします

  19. 19

    Sparkでの値の類似性に基づいて、キーと値のペアをマップします

  20. 20

    Excelで、2つの合計のパーセンテージを計算しようとしています

  21. 21

    Woocommerceサンキューページとメールの注文合計に新しい行を追加します

  22. 22

    文字列の類似性をパーセンテージで計算する

  23. 23

    パンダ-2つのセルの類似した内容に基づいて行をマージします

  24. 24

    年ごとのパフォーマンスに基づいて計算フィールドを追加します

  25. 25

    ASP.NET Coreは、プロパティモデルに計算を追加し、それをデータベースの列として使用します

  26. 26

    グループごとに複数の変数を合計し、それらの合計を使用して新しい列を作成します

  27. 27

    新しい行を追加して、パンダの既存のデータフレームからの合計と平均を計算します

  28. 28

    パンダ:複数の列のパーセンテージを計算し、結果を新しい列に保存します-最良の方法

  29. 29

    Rの行列乗算を使用して行ごとのコサイン類似度を計算する

ホットタグ

アーカイブ