別のデータフレームを条件としてデータフレームに値を追加する

ミシェル

これはおそらく非常に単純な質問ですが、多くの同様の投稿を閲覧した後でも、私はそれを理解するのに苦労しています。

2つのデータフレームがdvaluesありsvaluesます。

dvalues

district   districtID   value    state
Badgam     1002          30.2    N/A
Pulwama    1012          10.9    N/A
Kangra     2002          10.2    N/A
Amritsar   3015          29.8    N/A
...

およびsvalues

state            stateID
Jammu & Kashmir     1000
Himachal Pradesh    2000
Punjab              3000
....

districtID値が2つのstateID値の間にあることを条件として、各行の状態列に値を追加したいと思います。

たとえば、BadgamPulwama(ファイル1の最初の2つの値)のdistrictID値は1000から2000の間であるため、状態名はになります"Jammu & Kashmir"同様に、KangraIDが2000から3000の間の地区には、州名が必要"Himachal Pradesh"です。

私の最終結果は次のようになります。

district   districtID   value    state
Badgam     1002          30.2    Jammu & Kashmir
Pulwama    1012          10.9    Jammu & Kashmir
Kangra     2002          10.2    Himachal Pradesh
Amritsar   3015          29.8    Punjab
...

多くの試みの中で、これが機能した唯一の試みです。

dvalues$state<-
 ifelse(dvalues$districtID<2000,"Jammu & Kashmir", 
  ifelse(dvalues$districtID>2000 & dvalues$districtID<3000,"Himachal Pradesh",
    ifelse(dvalues$districtID>3000 & dvalues$districtID<4000,"Punjab",
      ifelse(dvalues$districtID>4000 & dvalues$districtID<5000,"Chandigarh",
       ...

しかし、これは遅くて醜いです。36行あることは言うまでもありません。もっとエレガントな解決策があるかどうか疑問に思いました。

ありがとう、私はあなたの答えに本当に感謝します。

TheComeOnMan

間隔が常に1000のままである場合、簡単な回避策は次のようになります-

dvalues$stateID <- dvalues$districtID - (dvalues$districtID %% 1000)
dvalues <- merge(dvalues, svalues, by = 'stateID')

しかし、一般的に、これらの間隔内マージのような状況では、data.table'roll引数を使用します-

library(data.table)

# converting data.frames to data.tables
svalues <- data.table(svalues)
dvalues <- data.table(dvalues)

# removing state column from dvalues as we will be getting that from svalues
dvalues[,state := NULL]

#setting keys
setkeyv(svalues,'stateID')
setkeyv(dvalues,'districtID')

# merging the data sets based on values in the key columns
# roll = Inf looks for the previous matching value on the key and merges with that
# see help entry for data.table to understand more
svalues[dvalues, roll = +Inf]

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

条件に基づいて別のデータフレームの値からデータフレームに新しい列を追加する

分類Dev

Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

分類Dev

Python:1つのデータフレームから値を取得し、別のデータフレームに追加します(行と列の条件)

分類Dev

条件付きで別のデータフレームにデータフレームを追加するパンダ

分類Dev

Python:あるデータフレームから別のデータフレームに値を追加します(複数の条件で)

分類Dev

R-別のデータフレームの一致する値を使用して、データフレームに新しい列を追加します

分類Dev

別の列名としてpandasデータフレームの値を使用する

分類Dev

別のデータフレームの値に基づいてデータフレームを更新します

分類Dev

ダミーを条件として、行ごとに列の合計をデータフレームに追加する

分類Dev

計算を使用して別のデータフレームに追加する

分類Dev

別のデータフレームでの頻度に基づいて、あるデータフレームに値を追加します

分類Dev

あるデータフレームから列名を取得し、パンダの別のデータフレームに空の列として追加します

分類Dev

データフレームのリストとしてデータフレームに列を追加します

分類Dev

別のデータフレームの値に基づいて、データフレームを複数のデータフレームに分割する

分類Dev

データフレーム内の値を別のデータフレームと照合し、存在する場合は値を追加します

分類Dev

Pyspark:udfを使用して、別のデータフレームの値に基づいてデータフレームに新しい列を追加します

分類Dev

別のリストの値を使用してデータフレームに行を追加する

分類Dev

rの値と列名を照合して、データフレームの値を別のデータフレームにマージします

分類Dev

別のデータフレームに基づいて新しいデータフレームを作成する

分類Dev

別のデータフレーム内の一致するデータに応じて、データフレーム内の値を更新します

分類Dev

forループを使用してデータフレームに値を追加する

分類Dev

条件Rに基づいてデータフレームの要素を別のデータフレームに追加する

分類Dev

特定の条件を尊重しながら、あるデータフレームから別のデータフレームに列の値を挿入する

分類Dev

別のデータフレームの条件を使用して、パンダのデータフレームにデータを入力して生成します

分類Dev

条件に基づいて、あるデータフレームから別のデータフレームに値を割り当てます

分類Dev

他の列を条件としてデータフレーム列に定数を追加する

分類Dev

複数の文字列を条件としてデータフレームに列を追加する

分類Dev

パンダ:別のデータフレームの値に基づいて、データフレームに新しい列を追加します

分類Dev

データフレームを別のデータフレームと照合してエラーを返す

Related 関連記事

  1. 1

    条件に基づいて別のデータフレームの値からデータフレームに新しい列を追加する

  2. 2

    Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

  3. 3

    Python:1つのデータフレームから値を取得し、別のデータフレームに追加します(行と列の条件)

  4. 4

    条件付きで別のデータフレームにデータフレームを追加するパンダ

  5. 5

    Python:あるデータフレームから別のデータフレームに値を追加します(複数の条件で)

  6. 6

    R-別のデータフレームの一致する値を使用して、データフレームに新しい列を追加します

  7. 7

    別の列名としてpandasデータフレームの値を使用する

  8. 8

    別のデータフレームの値に基づいてデータフレームを更新します

  9. 9

    ダミーを条件として、行ごとに列の合計をデータフレームに追加する

  10. 10

    計算を使用して別のデータフレームに追加する

  11. 11

    別のデータフレームでの頻度に基づいて、あるデータフレームに値を追加します

  12. 12

    あるデータフレームから列名を取得し、パンダの別のデータフレームに空の列として追加します

  13. 13

    データフレームのリストとしてデータフレームに列を追加します

  14. 14

    別のデータフレームの値に基づいて、データフレームを複数のデータフレームに分割する

  15. 15

    データフレーム内の値を別のデータフレームと照合し、存在する場合は値を追加します

  16. 16

    Pyspark:udfを使用して、別のデータフレームの値に基づいてデータフレームに新しい列を追加します

  17. 17

    別のリストの値を使用してデータフレームに行を追加する

  18. 18

    rの値と列名を照合して、データフレームの値を別のデータフレームにマージします

  19. 19

    別のデータフレームに基づいて新しいデータフレームを作成する

  20. 20

    別のデータフレーム内の一致するデータに応じて、データフレーム内の値を更新します

  21. 21

    forループを使用してデータフレームに値を追加する

  22. 22

    条件Rに基づいてデータフレームの要素を別のデータフレームに追加する

  23. 23

    特定の条件を尊重しながら、あるデータフレームから別のデータフレームに列の値を挿入する

  24. 24

    別のデータフレームの条件を使用して、パンダのデータフレームにデータを入力して生成します

  25. 25

    条件に基づいて、あるデータフレームから別のデータフレームに値を割り当てます

  26. 26

    他の列を条件としてデータフレーム列に定数を追加する

  27. 27

    複数の文字列を条件としてデータフレームに列を追加する

  28. 28

    パンダ:別のデータフレームの値に基づいて、データフレームに新しい列を追加します

  29. 29

    データフレームを別のデータフレームと照合してエラーを返す

ホットタグ

アーカイブ