所以我有两个数据框,一个是:
ID Player Strength
1003 Karl 20
1004 Karl 40
1005 Karl 50
1006 Karl 50
1007 Jen 17
1008 Jen 60
1009 Void 200
1010 Void 100
1011 Void 200
1012 Fin 90
另一个包含每个玩家的最大力量
Player Max Strength
Karl 50
Jen 60
Void 200
Fin 90
我要做的是过滤第一个数据框,以仅保留“强度”值等于第二个数据框中“最大强度”的行。因此,结果数据框将为:
ID Player Strength
1005 Karl 50
1006 Karl 50
1008 Jen 60
1009 Void 200
1011 Void 200
1012 Fin 90
答案 0 :(得分:0)
一个dplyr
选项可能是:
df1 %>%
filter(Strength == df2$Max_Strength[match(Player, df2$Player)])
ID Player Strength
1 1005 Karl 50
2 1006 Karl 50
3 1008 Jen 60
4 1009 Void 200
5 1011 Void 200
6 1012 Fin 90
与base R
的想法相同:
df1[with(df2, Max_Strength[match(df1$Player, Player)]) == df1$Strength, ]
答案 1 :(得分:0)
您可以使用semi_join
:
main_df %>%
semi_join(second_frame, by = c("Player", "Strength")
答案 2 :(得分:0)
另一个dplyr选项:
df1 %>%
left_join(df2,by = "Player") %>%
filter(Strengh==Max_Strength)