r - groupby 后在多列中应用不同的功能

标签 r dataframe dplyr aggregate

在 groupby 之后,我正在努力将 head(1) 应用于一列,聚合到另一列,并将逻辑表达式应用于另一列。

我有一个像这样的数据框 df:

df <- data.frame(ref = c(rep("123", 3), rep("456", 3), rep("789", 4)),
                 carrier = c("A", "A", "B", "C", "C", "C", "D", "E", "F", "A"), 
                 distance = c(20, 10, 40, 20, 90, 30, 20, 20, 30, 70),
                 stringsAsFactors = FALSE)


>df
ref    carrier    distance
123          A          20
123          A          10
123          B          40
456          C          20
456          C          90
456          C          30
789          D          20
789          E          20
789          F          30
789          A          70

我想在下面做这些事情。
  • 通过 ref
  • 分组
  • 变异一列 first_carrier,其中返回每个组的 carrier 列的第一个值
  • 变异一列 agg_distance,其中返回每组中 distance 列的聚合值
  • 改变一列 plus_100,如果 agg_distance 大于 350,则返回 TRUE,FALSE 小于 100。

  • 所以结果应该是这样的。
    ref  first_carrier  agg_distance  plus_100
    123              A            70     FALSE
    456              C           140      TRUE  
    789              D           140      TRUE
    

    我的尝试:
      df_new <- df %>%
        group_by(ref) %>%
        mutate("agg_distance" = summarise(sum(distance)) %>%
        mutate("plus_100" = ifelse(agg_distance >= 100, T, F))
    

    但我只是不确定如何选择每组中的第一个载体。

    最佳答案

    你几乎独自拥有它。 summarise 在没有 mutate 的情况下使用。要获得第一个载体,只需在分组后调用 carrier 列的第一行。

    library(dplyr)
    
    df_new <- df %>%
      group_by(ref) %>%
      summarise(first_carrier = carrier[1],
                agg_distance = sum(distance),
                plus_100 = ifelse(agg_distance >= 100, T, F))
    
    # A tibble: 3 x 4
        ref first_carrier agg_distance plus_100
      <chr>         <chr>        <dbl>    <lgl>
    1   123             A           70    FALSE
    2   456             C          140     TRUE
    3   789             D          140     TRUE
    

    关于r - groupby 后在多列中应用不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627920/

    相关文章:

    R:滚动日期范围内的累积总和

    r - 如何匹配两个数据帧的字符值并在 R 中应用与此匹配对应的函数?

    r - 如何循环遍历列,检查任何列中是否存在特定值,变异一个新列,如果存在则输入 1,如果不存在则输入 0?

    r - 倾斜表面辐射的 solarR 时间戳

    Pandas:数据简短摘要

    python - Pandas - 选择多个数据框标准

    scala - Spark : count percentage percentages of a column values

    r - 使用循环时的 tbl_df 和 data.frame 差异

    r - 将与时差对应的字符转换为以分钟为单位的数值

    r - 创建添加序列