ホーム>source

次の3つのデータフレームがあります。

<前>ウィズウィズ

そして

<前>ウィズウィズ

そして

<前>ウィズウィズ

df1 grade PIR rate 1 7 min 10.80 2 8 min 11.26 3 9 min 12.10 4 7 X1 11.17 5 8 X1 11.65 6 9 X1 12.56 7 7 X2 11.55 8 8 X2 12.06 9 9 X2 13.03 10 7 X3 11.95 ... の各ケースについてそして df2 grade PIR new_rate 1 7 min 13.00 2 8 min 13.00 3 9 min 13.00 4 7 X1 13.48 5 8 X1 13.48 6 9 X1 13.48 7 7 X2 13.98 8 8 X2 13.98 9 9 X2 13.98 10 7 X3 14.50 ... 特定する必要があります最も近い最高値(または同等のもの)  df3 ID assoc_rate assoc_grade 124575 10.80 7 123413 11.42 7 111539 11.65 8 112284 12.04 8 125245 12.10 9 132588 12.44 9 ....同じ df3$assoc_ratedf3$assoc_grade に参加するためにそして df1$rate 、これで df1$grade をアタッチできます df1$grade に基づくそして df1$PIR

私の最終目標は、 df2$new_rate を添付することですそして grade PIR からウィズウィズへ彼らの new_rate に基づいてそして PIR 、しかしそれは df2 に関連している必要があります 。

だから私の望ましいデータフレームは次のようになります:

<前>ウィズウィズ

洞察や指示をありがとうございます。 (私は何かを試しましたこの しかし、それを機能させる方法を知りませんでした。)

df3
あなたの答え
  • 解決した方法 # 1

    tidyverse の使用

    <前>ウィズウィズ

    ウィズウィズ  そして df3 %>% left_join(df1, by = c("assoc_grade" = "grade")) %>% mutate(diff = rate - assoc_rate, new_diff = ifelse(diff < 0, 1000, diff)) %>% group_by(ID) %>% filter(new_diff == min(new_diff)) %>% ungroup() %>% left_join(df2, by = c("assoc_grade" = "grade", "PIR" = "PIR"))  必要な手順です。 join の使用   filter の前 ingを使用すると、 group_by  各 filter

  • 解決した方法 # 2

    最も近い最高または同等のものを見つける関数を作成する

    リンクからインスピレーションを受ける条件を満たすグループの最初の要素を見つける方法

    <前>ウィズウィズ リスト内のdf1から一致するすべての行を取得する <前>ウィズウィズ

    #df3でグループを抽出する

    <前>ウィズウィズ

    #対応するグループですべての行を抽出

    <前>ウィズウィズ

    #対応する各行をリストに入れ、df2と結合します

    <前>ウィズウィズ

  • 解決した方法 # 3

    Akash87の回答に感謝します。ただし、構文エラーはほとんどないと思います それをあなたの例と完全に一致するように書き直してください

    <前>ウィズウィズ

  • 解決した方法 # 4

    filter で質問を参照したので  答え、これは ID を使用したオプションです :

    <前>ウィズウィズ

    出力:

    <前>ウィズウィズ first_equal_sup <- function(x, value){ (x >= value) & (cumsum(x >= value) == 1)}

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ multithreading - current_thread()が常にMainThreadを返す理由python