【问题标题】:Filtering rows based on another dataframe根据另一个数据框过滤行
【发布时间】:2020-02-06 21:00:34
【问题描述】:

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

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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    一个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, ]
    

    【讨论】:

      【解决方案2】:

      你可以使用semi_join:

      main_df %>% 
          semi_join(second_frame, by = c("Player", "Strength")
      

      【讨论】:

        【解决方案3】:

        另一个 dplyr 选项:

        df1 %>%
        left_join(df2,by = "Player") %>%
        filter(Strengh==Max_Strength)
        

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 2018-11-12
          • 1970-01-01
          • 2014-12-27
          • 1970-01-01
          • 2021-10-31
          相关资源
          最近更新 更多