簡體   English   中英

如何使用 R 中另一個 dataframe 中的值匹配一個 dataframe 中的兩列

[英]How to match two columns in one dataframe using values in another dataframe in R

我有兩個數據框。 一個是一組 ≈4000 個條目,看起來與此類似:

| grade_col1 | grade_col2 |
| --- | --- |
| A-| A-|
| B | 86|
| C+| C+|
| B-| D |
| A | A |
| C-| 72|
| F | 96|
| B+| B+|
| B | B |
| A-| A-|

另一個是一組 ≈700 個條目,看起來與此類似:

| grade | scale |
| --- | --- |
| A+|100|
| A+| 99|
| A+| 98|
| A+| 97|
| A | 96|
| A | 95|
| A | 94|
| A | 93|
| A-| 92|
| A-| 91|
| A-| 90|
| B+| 89|
| B+| 88|

...等等。

我要做的是創建一個新列,顯示grade_col2 是否將grade_col1 與二進制0-1 output 匹配(0 = 不匹配,1 = 匹配)。 Grade_col2 的大部分以字母等級顯示。 但是每隔一段時間,grade_col2 中的條目就會被意外輸入為數字等級。 即使grade_col2 是數字等級而不是字母等級,我也希望此匹配列給我一個“1”。 換句話說,如果grade_col1 是B 而grade_col2 是86,我希望這仍然被視為匹配。 僅當grade_col1 為F 且grade_col2 為96 時才會匹配(類似於grade_col1 為B- 且grade_col2 為D = 不匹配)。

第二個數據框給了我需要在一個和另一個之間轉換的信息(97-100 之間的條目是 A+,93-96 之間是 A,等等)。 我只是不知道如何運行一個腳本,該腳本使用此信息在所有 ≈4000 個條目中查找匹配項。 理論上,我可以手動執行此操作,但實際數據集太長以至於不現實。

我一直在考慮使用帶有 dplyr 的嵌套 if_else 語句。 但是一旦我通過了第一個“if”語句,我就卡住了。 我會很感激這個人能提供的任何幫助。

您可以使用聯接來執行此操作。

讓你的第一個 dataframe 是grades_df和你的第二個 dataframe 是lookup_df ,那么你想要類似下面的東西:

output = grades_df %>%
  # join on look up, keeping everything grades table
  left_join(lookup_df, by = c(grade_col2 = "scale")) %>%
  # combine grade_col2 from grades_df and grade from lookup_df
  mutate(grade_col2b = ifelse(is.na(grade), grade_col2, grade)) %>%
  # indicator column
  mutate(indicator = ifelse(grade_col1 == grade_col2b, 1, 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM