代码之家  ›  专栏  ›  技术社区  ›  Markus Weninger

根据特定条件从数据帧中提取每多列组一行[重复]

  •  -4
  • Markus Weninger  · 技术社区  · 7 年前

    假设我有以下格式的数据帧:

     Group Setting Runtime Memory SomeOtherColumns
     A     X       102     105    ...
     A     X       107     80     ...
     A     Y       100     104    ...
     A     Y       101     82     ...
     B     X       10      50     ...
     B     X       11      51     ...
     B     X       8       52     ...
     B     Y       13      60     ...
     B     Y       14      61     ...
     B     Y       15      62     ...
     C     X       5       6      ...
     C     Y       6       7      ...
    

    我想每行提取一行 Group+Setting ,即一行 A+X ,则, A+Y ,则, B+X ,则, B+Y ,则, C+X C+Y 。 提取的行应为 Runtime 给定组的值。

    按照预期结果:

     Group Setting Runtime Memory SomeOtherColumns ...
     A     X       102     105    ...
     A     Y       100     104    ...
     B     X       8       52     ...
     B     Y       13      60     ...
     C     X       5       6      ...
     C     Y       6       7      ...
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   talat    7 年前

    使用 dplyr 这将是:

    library(dplyr)
    df %>% group_by(Group, Setting) %>% slice(which.min(Runtime))
    # # A tibble: 6 x 5
    # # Groups:   Group, Setting [6]
    # Group Setting Runtime Memory SomeOtherColumns
    #  <fct> <fct>     <int>  <int> <fct>           
    # 1 A     X           102    105 ...             
    # 2 A     Y           100    104 ...             
    # 3 B     X             8     52 ...             
    # 4 B     Y            13     60 ...             
    # 5 C     X             5      6 ...             
    # 6 C     Y             6      7 ...   
    

    同样,在 data.table 用语:

    library(data.table)
    setDT(df)
    df[, .SD[which.min(Runtime)], by = .(Group, Setting)]
    

    或使用订单:

    unique(df[order(Runtime)], by = c("Group", "Setting"))