gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:44:39 25 4
gpt4 key购买 nike

在 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com