【发布时间】:2021-11-19 17:42:12
【问题描述】:
假设我有两个这样的数据框:
test_1 = game_df = read.table(text = "id winner_name
1 Jon
2 Bob
3 Lucas
4 Marcus
5 Toad
6 Donkey", header = T)
test_2 = game_df = read.table(text = "id_1 id_2 loser_name
9 1 Henry
2 2 George
3 3 Bagel
4 4 Cat
5 5 Giraffe
7 6 Monkey", header = T)
我想做的是首先在id = id_=1匹配上left_jointest_1,如下所示:
test_1 %>% left_join(test_2 %>% select(id_1, loser_name), by = c('id' = 'id_1'))
会有某些北美比赛(约翰和驴)
id winner_name loser_name
1 1 Jon <NA>
2 2 Bob George
3 3 Lucas Bagel
4 4 Marcus Cat
5 5 Toad Giraffe
6 6 Donkey <NA>
然后我想使用id_2 作为匹配列来填充 NA,所以我目前做这样的事情:
test_1 %>% left_join(test_2 %>% select(id_1, loser_name), by = c('id' = 'id_1')) %>%
left_join(test_2 %>% select(id_2, loser_name), by = c('id' = 'id_2'))
id winner_name loser_name.x loser_name.y
1 1 Jon <NA> Henry
2 2 Bob George George
3 3 Lucas Bagel Bagel
4 4 Marcus Cat Cat
5 5 Toad Giraffe Giraffe
6 6 Donkey <NA> Monkey
这似乎可行,但它会生成一堆带有x 和y 后缀的重复列。在我的实际数据集中,我必须通过大量 id 匹配来通过这种条件匹配方法,因此它会生成大量重复的列,然后我必须手动取消选择和重命名。
问题是实际test_2 data.frame 中有数百列(loser_name、loser_country、loser_elo、loser_record、loser_win_rate)等,所以我需要手动指定名称和列为每一个结合。此外,因为我用多个 id 进行这种顺序 id 匹配,所以我会有 losser_name.x、loser_name.y、loser_name.z,而且我事先不知道每一列会有多少个后缀。
有没有更简单的方法?
【问题讨论】:
-
你的预期输出是什么
-
预期输出是最后一个数据帧,除了只显示没有 NA (
loser_name.y) 且没有.y后缀的完整列的结果。但是,在我的实际数据集中,我有数百个正在匹配的列,因此手动重命名它们并删除不完整的列很多。