r - 使用 R 中的查找表基于另一个 df 创建新列
问题描述
我很难理解如何在 R 中执行相当于查找表的操作。我看到人们建议您应该使用“合并”来代替查找表,但我不确定是什么正确的做法是:
假设我有以下内容:
set.seed(42)
person_ids <- data.frame(person_1_id = stringi::stri_rand_strings(100, 10, '[A-Z]'),
person_2_id = stringi::stri_rand_strings(100, 10, '[A-Z]'))
team_id_lookup <- data.frame(person_id = stringi::stri_rand_strings(100, 10, '[A-Z]'),
team_ids = floor(runif(100, min=0, max=500)))
我想在person_ids
--team_id_1
和中创建两个新列team_id_2
,它们使用查找数据框来查找给定 person_id 的相应 team_ids 并获取该值。
这里的正确方法是什么?
解决方案
set.seed(42)
person_ids <- data.frame(person_1_id = stringi::stri_rand_strings(10, 1, '[A-Z]'),
person_2_id = stringi::stri_rand_strings(10, 1, '[A-Z]'))
team_id_lookup <- data.frame(person_id = stringi::stri_rand_strings(5, 1, '[A-Z]'),
team_ids = floor(runif(5, min=0, max=500)))
library(dplyr)
person_ids %>%
left_join(team_id_lookup, by=c("person_1_id"="person_id")) %>%
left_join(team_id_lookup, by=c("person_2_id"="person_id")) %>%
rename(team_id_1 = team_ids.x,
team_id_2 = team_ids.y)
# person_1_id person_2_id team_id_1 team_id_2
# 1 X L 257 NA
# 2 Y S 223 NA
# 3 H Y NA 223
# 4 V G NA NA
# 5 Q M NA NA
# 6 N Y NA 223
# 7 T Z NA 452
# 8 D D 195 195
# 9 R M NA NA
# 10 S O NA NA
只有在您的查找表中找到的人才会有匹配项。所有其他都会有NA
。
推荐阅读
- .net - 在多个平台的解决方案中构建 Visual Studio C++ 项目
- java - java - 如何在Arraylist java中按ID号搜索和显示对象?
- javascript - 如何在 React JS 中将 Image-Url 分享到 Facebook、Twitter 和 Instagram
- python - 使用 Python 检查启用的 Windows 功能
- javascript - ReferenceError:未使用 useMedia() hook + next.js 定义窗口
- typescript - Eslint 不使用 TypeScript 语法
- sql - 如何在 BigQuery 中将 12/01/2019 12:00:00 am 转换为 DATETIME
- transactions - 如何在使用更新模型 == 事务的 Ag-Grid 中重置 rowData
- r - R:使用二阶多项式预测天气
- flutter - Flutter - Dart - Reflectable 包:如何:获取类字段类型?从类/类型实例化对象?使用 Reflectable 设置字段值