[英]How can I check that two columns in one dataframe both match two columns in another 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.