根据另一个数据框过滤行

时间:2020-02-06 12:16:41

标签: r dataframe

所以我有两个数据框,一个是:

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

3 个答案:

答案 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)